并发jquery jsonp响应被发送到错误的成功处理程序

时间:2015-01-18 21:00:33

标签: javascript jquery ajax jsonp

我有两个jquery ajax方法在页面加载时触发jsonp GET请求。请求方法的形式如下:

function get_1(callback_method)
{
    $.ajax({ 
    type: "GET",
    url:url_endpoint_1,
    async: true,
    dataType: "jsonp",
    jsonpCallback: 'callback',
    success: function(result) 
        {
            callback_method(result);
        },
    error: function(fail){ console.log(fail); }
    });

}

function get_2(callback_method)
{
    $.ajax({ 
    type: "GET",
    url:url_endpoint_2,
    async: true,
    dataType: "jsonp",
    jsonpCallback: 'callback',
    success: function(result) 
        {
            callback_method(result);
        },
    error: function(fail){ console.log(fail); }
    });
}

单独触发时,每种方法都能完美运行。但是,当在页面加载时触发两者时,对get_1的响应将发送到get_2成功处理程序。我做错了什么?

编辑1

callback_method传递给函数。这是为了将调用抽象到服务器,因为出于不同的原因提出了相同的请求。例如

function alert_user(response)
{
    alert(response.text);
}

function log_to_console(response)
{
    console.log(response.text);
}

$(document).ready(function() 
{
    get_1(alert_user);
    get_2(log_to_console);
});

和其他地方我可能会打电话

    get_1(log_to_console);

1 个答案:

答案 0 :(得分:2)

jsonpCallback选项指定将处理此请求响应的回调的实际名称,它应该是唯一的

来自jQuery docs for the `jsonpCallback' option

的引用
  

最好让jQuery生成一个唯一的名称,因为它会成功   更容易管理请求并提供回调和错误   处理

不要将jsonpCallback选项与jsonp选项混淆,后者设置了param的名称,该值是生成的回调名称。

例如,如果您设置jsonp: "callback",并省略[{1}}选项[您应该],则生成的请求将类似jsonpCallback,服务器'响应将是http://myUrl/.../?callback=jquery_123456789,其中jquery_123456789(here_goes_the_response);是由jQuery生成的函数,它将负责将响应传递给您的成功回调。