并发 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 生成的函数,它将负责将响应传递给您的成功回调。
我有两个 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 生成的函数,它将负责将响应传递给您的成功回调。