我需要进行两个不同的ajax调用,并将json数据传递给另一个函数。我怎么能使用下面的ajax调用格式呢?
$.ajax({
url:'',
type:'GET',
dataType: 'json',
success: callme
});
$.ajax({
url:'',
type:'GET',
dataType: 'json',
success: callme
});
function callme(JSON1,JSON2){
}
答案 0 :(得分:6)
这是$.when
的完美用例(假设您正在使用jQuery):
var ajax1 = $.ajax({
url:'',
type:'GET',
dataType: 'json'
});
var ajax2 = $.ajax({
url:'',
type:'GET',
dataType: 'json'
});
$.when(ajax1, ajax2).done(function(json1, json2) {
// both requests succeeded
}).fail(function(){
// one or both requests failed
});
仅当两个请求成功完成时,才会调用done
回调。如果任何请求失败,将调用fail
回调。
答案 1 :(得分:2)
$.ajax({
url:',
type:'GET',
dataType: 'json',
success: callme1
});
$.ajax({
url:',
type:'GET',
dataType: 'json',
success: callme2
});
var JSON1;
var JSON2;
function callme1(JSON){
JSON1 = JSON;
if (JSON2)
callme();
}
function callme2(JSON){
JSON2 = JSON;
if (JSON1)
callme();
}
function callme() {
// Do whatever you need with JSON1 and JSON2.
}
答案 2 :(得分:1)
嵌套你的ajax电话
$.ajax({
url:',
type:'GET',
dataType: 'json',
success: function(JSON1) {
$.ajax({
url:',
type:'GET',
dataType: 'json',
success: function(JSON2) {
callme(JSON1,JSON2);
}
});
}
});
function callme(JSON1,JSON2){
}
答案 3 :(得分:0)
您需要将函数链接在一起,以便第一个AJAX结果调用第二个函数,第二个AJAX结果调用callme函数:
$.ajax({
url:',
type:'GET',
dataType: 'json',
success: function(data) {
$.ajax({
url:',
type:'GET',
dataType: 'json',
success: function(data2) {
callme(data, data2);
}
});
}
});
答案 4 :(得分:0)
我的想法是创建一个getData函数,你可以传递一个url并进行回调。在最后一次回调中,请callme()
传递两个返回的数据对象。
function callme(JSON1, JSON2) {}
function getData(url, fn) {
$.ajax({
url: url,
type: "GET",
dataType: "json",
success: fn
});
}
getData("url", function(JSON1) {
getData("url", function(JSON2) {
callme(JSON1, JSON2);
});
});
答案 5 :(得分:0)
你不能指望两个单独的ajax调用同时处理,因为JS是单线程的(并且AJAX调用是异步的,以免你指定它们不是 - 但是要避免这种情况)。另外:你不能指望JS考虑你为任何函数指定的参数数量,并且知道在两个参数都有值之前它不应该调用函数。
最后:你能指出你的问题实际上是什么:你问的是如何调用另一个函数,但在这两种情况下你似乎都在传递相同的成功回调。您能否详细说明两个呼叫预期返回的数据以及您要发送的数据?
如果只想在两次调用成功后调用函数,可以使用闭包:
var callme = (function()
{
var JSON1, JSON2;
return function(response)//this function will receive each response separately
{
JSON1 = JSON1 || response;//if JSON1 isn't set, assign current response
if (JSON1 !== response)
{//JSON1 was already set, second response is in
JSON2 = response;
//code to process both responses at once goes here
//but make them undefined before returning, if not, a second call won't work as expected
JSON1 = undefined;
JSON2 = undefined;
}
};
}();
$.ajax({url: 'some/url',
data: yourData1,
type: 'GET',
success: callme});
$.ajax({url: 'second/url',
data: yourData2,
type: 'GET',
success: callme});
请记住,闭包(callme
函数)在AJAX调用之前是至关重要的:因为callme
赋予函数的方式(作为表达式),函数声明是< em> not 悬挂!
答案 6 :(得分:-1)
您可以通过将async属性设置为false来将ajax设置为 synchronize 调用。 以便在完成两个请求后调用 callme 函数。
var JSON1, JSON2
$.ajax({
url: url,
type:'GET',
dataType: 'json',
async: false,
success: function(data){JSON1=data}
});
$.ajax({
url: url,
type:'GET',
dataType: 'json',
async: false
success: function(data){JSON2=data}
});
callme(JSON1,JSON2);
function callme(JSON1,JSON2){
}
多数民众赞成。