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

Concurrent jquery jsonp response being sent to wrong success handler

本文关键字:错误 成功 处理 程序 jsonp jquery 响应 并发      更新时间:2023-09-26

我有两个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 文档中的 'jsonpCallback' 选项:

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

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

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