我正在尝试构建一个完全通用的jQuery ajax函数。它将接收所有数据甚至请求类型作为参数。之后,它将替换相应的变量并构建请求。这是代码......
function server_request (type, url, dataType, data) {
var packet;
var response = null;
if (packet) {
packet.abort();
};
if (type == "get") {
packet = $.ajax({ type: type, url: url, dataType: dataType });
packet.done(function(returned_data){
response = returned_data;
});
}
return response;
response = null;
}
所以我希望收到的数据存储在一个名为“response”的已经声明的变量中,我想让它返回到另一个地方使用。不知怎的,它不起作用,它不断返回响应变量的预定义值。有人可以帮忙??
答案 0 :(得分:2)
Ajax请求是异步的,所以当你在某处使用响应时,它现在可能还有价值。
您应该返回整个packet
并在需要回复的地方进行packet.done()
来电。
答案 1 :(得分:1)
function server_request (type, url, dataType, data, _callBack) {
var packet;
//var response = null; //not needed
if (packet) {
packet.abort();
};
if (type == "get") {
packet = $.ajax({
type: type,
url: url,
dataType: dataType,
callback: _callBack
});
packet.done(function(returned_data){
//this context is a new context, coming from the AJAX constructor
//response = returned_data; //this is assigning the data too late
return this.callback(returned_data);
});
}
//this context wont return anything because its not the AJAX context.
//return response;
//response = null;
}
当您创建ajax对象时,您可以在构造函数中指定任何类型的任意数据(由于此原因,JavaScript规则!) - 因此,您定义了一个回调属性并将您提供的_callbackFunction分配给该属性。
在packet.done上下文中,您调用回调函数并传入响应数据。
您的通话方式如下所示。
server_request('type','url','datatype','data',
function(returnedData){
//now you can work with the returend data in the correct context.
});