将两个json结果传递给函数

时间:2012-12-05 12:18:57

标签: javascript jquery

我需要进行两个不同的ajax调用,并将json数据传递给另一个函数。我怎么能使用下面的ajax调用格式呢?

$.ajax({ 
    url:'',
    type:'GET',
    dataType: 'json',
    success: callme
}); 

$.ajax({ 
    url:'',
    type:'GET',
    dataType: 'json',
    success: callme
});

function callme(JSON1,JSON2){
}

7 个答案:

答案 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){
}

多数民众赞成。