2016-03-26 1 views
1

2つの異なるURLから値を取得してからマージする必要があります。私は1つのURLにすべてのデータを取得する方がはるかに良いことを知っていますが、それは私が持っている方法であり、私はそれを扱う必要があります。ajaxで2つのURLを操作する

a_valueの値を印刷したいのですが、bが値を返していない間に印刷されています。関数を同期させる方法の記事を読んだが、コードに実装する方法がわからず、私の場合に最適な解決策が何か分からない。私はJavaScriptでかなり新しく、まだいくつかの助けと指導が必要です。

function any_function() { 
     $.ajax(
      { 
       url : '/url1', 
       type: "GET", 
       success:function(data, textStatus, jqXHR) 
       { 
        $("#print").html(a(data)); 
       } 
      }); 
     } 


    function a(data){ 

     x = 'any value' //`do something with data and insert to this variable` 
     a_value = x + b(`some id that extracted from data`) 

     return a_value 
    } 


    function b(id){ 
    $.ajax({ 
       url: '/url2', 
       type: 'GET', 
       success: function (data, textStatus, jqXHR) { 
        b_value = c(data, id) 
       } 
      }); 
    return b_value 
    } 


    function c(data, id){ 
     //do something with `data` and return the value 
     return c_value 
    } 
+0

約束を使用してhttps://api.jquery.com/promise/に行く方法です – lascort

答えて

4
function f() { 
    var request1 = $.ajax({ 
     url : '/url1', 
     type: 'GET' 
    }); 
    var request2 = $.ajax({ 
     url: '/url2', 
     type: 'GET' 
    }); 
    $.when(request1, request2).done(function(result1, result2){ 
     data1 = result1[0] 
     data2 = result2[0] 
     // r1 and r2 are arrays [ data, statusText, jqXHR ] 
     // Do stuff here with data1 and data2 
     // If you want to return use a callback or a promise 
    }) 
} 
+0

答えをありがとう。 ajaxによって引き出されたデータはどこにあるはずですか?変数 'url1'と' url2'にあると仮定していますか? – Omri

+0

@Omriデータはresult1とresult2にあります –

+0

ありがとう!私はresult1とresult2にオブジェクト全体を持っています。彼のデータだけを得るには?私のAJAXの成功 'データ'は関連するjsonしか持っていませんでしたが、あなたのコードではオブジェクト全体があります。 – Omri

0

これは約束で、同期に見える形で行うことができます

$.get(url1) 
.then(function(data1){ 
    return $.get(url2) 
}) 
.then(function(data2){ 
    return $.get(url3); 
}) 
.then(function(data3){ 
    // All done 
}); 
+0

あなたの答えをありがとう。私が上記のように、私はJavaScriptの広大な経験を持っていません。あなたのコードで私のAjax呼び出しをどのように使うべきですか? 'url1'を本当のURLに置き換えるだけでいいですか? – Omri

+0

より速いparrallelでリクエストを行うことができます –

0

あなただけの最初の1の成功ハンドラ内で2番目の呼び出しを行う必要があります。

function any_function() { 
    $.ajax({ 
      url : '/url1', 
      type: "GET", 
      success:function(data, textStatus, jqXHR) { 
       $("#print").html(a(data)); 
       b("someId"); 
      } 
    }); 
} 

function a(data){ 

    x = 'any value' //`do something with data and insert to this variable` 
    a_value = x + b(`some id that extracted from data`) 

    return a_value; 
} 

function b(id){ 
    $.ajax({ 
      url: '/url2', 
      type: 'GET', 
      success: function (data, textStatus, jqXHR) { 
       b_value = c(data, id); 
       return b_value; 
      } 
    }); 
} 


function c(data, id){ 
    //do something with `data` and return the value 
    return c_value 
} 
+1

parrallelで両方のリクエストを実行する方が良いでしょう –

+0

ユーザーは並行ではなく同期的に行う方法について質問しています。 –

+0

ユーザーは両方の要求が完了したらコードを実行したい –

関連する問題