如何使这个通用的ajax请求返回收到的数据?

时间:2015-08-26 19:29:29

标签: javascript jquery ajax web

我正在尝试构建一个完全通用的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”的已经声明的变量中,我想让它返回到另一个地方使用。不知怎的,它不起作用,它不断返回响应变量的预定义值。有人可以帮忙??

2 个答案:

答案 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.
       });