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

Concurrent jquery jsonp response being sent to wrong success handler

我有两个 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);

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

引自jQuery docs for the `jsonpCallback' option

It is preferable to let jQuery generate a unique name as it'll make it easier to manage the requests and provide callbacks and error handling.

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

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