3

2つの異なるajax呼び出しを行い、両方のjsonデータを別の関数に渡す必要があります。以下のajax呼び出し形式を使用してそれを行うにはどうすればよいですか?

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

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

function callme(JSON1,JSON2){
}
4

7 に答える 7

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

于 2012-12-05T12:27:19.053 に答える
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.
}
于 2012-12-05T12:21:57.327 に答える
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){
}
于 2012-12-05T12:22:07.200 に答える
0

最初のAJAX結果が2番目の関数を呼び出し、2番目のAJAX結果がcallme関数を呼び出すように、関数をチェーン化する必要があります。

$.ajax({ 
    url:',
    type:'GET',
    dataType: 'json',
    success: function(data) {
        $.ajax({ 
            url:',
            type:'GET',
            dataType: 'json',
            success: function(data2) {
                callme(data, data2);
            }
         });
    }
});    
于 2012-12-05T12:23:49.347 に答える
0

ここでの私の考えは、URLを渡してコールバックを持つことができるgetData関数を作成することです。最後のコールバックで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);
    });
});
于 2012-12-05T12:26:28.273 に答える
0

JSはシングルスレッドであるため、2つの別々のajax呼び出しが同時に処理されることは期待できません(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関数が(式として)割り当てられる方法のため、関数宣言は引き上げられません

于 2012-12-05T12:26:46.817 に答える
-1

asyncプロパティをfalseに設定することで、ajaxを同期呼び出しとして作成できます。両方のリクエストに成功した後、aftercallme関数が呼び出されるようにします。

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

それでおしまい。

于 2012-12-05T12:23:00.753 に答える