Nodejs中node.js版本$.ajax方法,使用基本和jQuery.ajax相同

Nodejs中node.js版本$.ajax方法,使用基本和jQuery.ajax相同

/**

  • 功能:本文件主要实现了nodejs版本的$.ajax方法,使用基本和jQuery.ajax相同
  • 时间:2012-07-17
  • 作者:潘雪鹏 */

var http = require(“http”), Url = require(“url”), querystring = require(‘querystring’);

// 默认值 function defaults(url){ return { // 如果返回false可以取消本次请求 beforeSend: function(req){}, complete: function(req){}, data: ‘’, // Object, String dataType: ‘html’, error: function(){}, headers: {}, // {k:v, …} statusCode: {}, success: function(data){}, timeout: 10, type: ‘GET’, // GET, POST url: url } }

/** * */ function ajax( settings ){ // ajax(settings) if( typeof settings === “object” ){ // 处理默认值继承 // todo …

}

var params = Url.parse(settings.url, true);
// params 解析出来的参数如下
// {
// "protocol":"http:",
// "slashes":true,
// "host":"localhost:3000",
// "port":"3000",
// "hostname":"localhost",
// "href":"http://localhost:3000/?d=1",
// "search":"?d=1",
// "query":{"d":"1"},
// "pathname":"/",
// "path":"/?d=1"
// }

var options = {
	host: params.hostname,
	port: params.port || 80,
	path: params.path,
	method: settings.type
};

var req = http.request(options, function(res) {
	var data = '';
	res.on('data', function(chunk){
		data += chunk;
	}).on('end', function(){
		if(	settings.dataType === "json" ){
			try{
				data = JSON.parse(data);
			}catch(e){
				data = null;
			}
		}
		settings.success(data);
		settings.complete(req);
	});
}).on('error', function(e) {
	settings.error(e);
});

if( typeof settings.beforeSend === "function" ){
	if ( !settings.beforeSend(req) ){
		settings.complete(req);
		req.end();
		return false;
	}
}

if( settings.type === "POST" ){
	req.write(querystring.stringify(settings.data));
}

req.setTimeout(settings.timeout);
req.end();

}

exports.ajax = ajax;


7 回复

Nodejs中node.js版本$.ajax方法,使用基本和jQuery.ajax相同

介绍

本文件主要实现了Node.js版本的$.ajax方法,该方法的使用方式与jQuery的$.ajax方法基本相同。通过这个实现,开发者可以在Node.js环境中模拟浏览器中的AJAX请求。

示例代码

/**
 * 功能:本文件主要实现了nodejs版本的$.ajax方法,使用基本和jQuery.ajax相同
 * 时间:2012-07-17
 * 作者:潘雪鹏
*/

var http = require("http"),
    Url = require("url"),
    querystring = require('querystring');

// 默认值
function defaults(url) {
    return {
        // 如果返回false可以取消本次请求
        beforeSend: function (req) {},
        complete: function (req) {},
        data: '', // Object, String
        dataType: 'html',
        error: function () {},
        headers: {}, // {k:v, ...}
        statusCode: {},
        success: function (data) {},
        timeout: 10,
        type: 'GET', // GET, POST
        url: url
    };
}

/**
 * 实现 $.ajax 方法
 */
function ajax(settings) {
    // 如果settings是一个对象
    if (typeof settings === "object") {
        // 处理默认值继承
        settings = Object.assign(defaults(), settings);
    }

    var params = Url.parse(settings.url, true);

    var options = {
        host: params.hostname,
        port: params.port || 80,
        path: params.path,
        method: settings.type
    };

    var req = http.request(options, function (res) {
        var data = '';
        res.on('data', function (chunk) {
            data += chunk;
        }).on('end', function () {
            if (settings.dataType === "json") {
                try {
                    data = JSON.parse(data);
                } catch (e) {
                    data = null;
                }
            }
            settings.success(data);
            settings.complete(req);
        });
    }).on('error', function (e) {
        settings.error(e);
    });

    if (typeof settings.beforeSend === "function") {
        if (!settings.beforeSend(req)) {
            settings.complete(req);
            req.end();
            return false;
        }
    }

    if (settings.type === "POST") {
        req.write(querystring.stringify(settings.data));
    }

    req.setTimeout(settings.timeout);
    req.end();
}

exports.ajax = ajax;

使用示例

以下是如何使用上述实现的$.ajax方法:

const myAjax = require('./path/to/ajax'); // 导入自定义的ajax方法

myAjax({
    url: 'http://localhost:3000/api/data',
    type: 'GET',
    dataType: 'json',
    success: function(data) {
        console.log('Success:', data);
    },
    error: function(error) {
        console.error('Error:', error);
    },
    timeout: 5000 // 5秒超时
});

myAjax({
    url: 'http://localhost:3000/api/data',
    type: 'POST',
    data: { key: 'value' },
    dataType: 'json',
    success: function(data) {
        console.log('Success:', data);
    },
    error: function(error) {
        console.error('Error:', error);
    },
    timeout: 5000 // 5秒超时
});

说明

  1. defaults函数:定义了$.ajax方法的默认配置。
  2. ajax函数:实现了$.ajax方法的核心逻辑,包括处理请求、响应和错误处理。
  3. 使用示例:展示了如何调用自定义的$.ajax方法进行GET和POST请求。

通过这种方式,开发者可以在Node.js环境中使用类似于jQuery的AJAX方法来发送HTTP请求。


这代码… 前后记得加两行个 3 个反引号高亮下, 统一增加缩进也行啊

好捉鸡- -

前后添加3个反引号,果然好使

这是什么编辑器,看着还很舒服的

发个jquery版本的nodejs使用ajax的例子可以不,在下就是做个登录,纠结了1天了,ajax验证,提交显示not a string or buffer,求帮忙

在Node.js环境中实现一个类似于jQuery的$.ajax方法,可以让开发者更方便地进行HTTP请求。以下是一个简单的实现示例,该示例展示了如何创建一个类似jQuery的$.ajax方法,包括基本的配置、请求处理以及错误处理等功能。

var http = require("http");
var Url = require("url");
var querystring = require('querystring');

// 设置默认选项
function defaults(options) {
    return {
        url: '',
        method: 'GET',
        headers: {},
        data: {},
        dataType: 'text',
        timeout: 10000,
        beforeSend: function() {},
        success: function() {},
        error: function() {},
        complete: function() {}
    };
}

// 创建ajax函数
function ajax(customOptions) {
    var options = defaults(customOptions);

    var parsedUrl = Url.parse(options.url, true);
    var requestOptions = {
        hostname: parsedUrl.hostname,
        port: parsedUrl.port || 80,
        path: parsedUrl.path,
        method: options.method,
        headers: options.headers
    };

    var req = http.request(requestOptions, function(res) {
        res.setEncoding('utf8');
        var responseString = '';

        res.on('data', function(data) {
            responseString += data;
        });

        res.on('end', function() {
            if (options.dataType === 'json') {
                try {
                    responseString = JSON.parse(responseString);
                } catch (e) {
                    responseString = null;
                }
            }

            options.success(responseString);
            options.complete();
        });
    });

    req.on('error', function(e) {
        options.error(e);
        options.complete();
    });

    if (!options.beforeSend(req)) {
        options.complete();
        req.end();
        return;
    }

    if (options.method === 'POST') {
        req.write(querystring.stringify(options.data));
    }

    req.setTimeout(options.timeout, function() {
        req.abort();
        options.error(new Error('Request timed out'));
        options.complete();
    });

    req.end();
}

module.exports = ajax;

在这个实现中,我们定义了一个名为ajax的函数,它接收一个包含请求配置的对象作为参数,并使用这些配置来发起HTTP请求。此函数支持GETPOST两种请求方式,同时支持设置自定义头、超时时间以及数据格式转换等常用功能。通过这种方式,我们可以让Node.js中的HTTP请求与jQuery的$.ajax方法具有相似的API风格,从而减少开发者的迁移成本。

回到顶部