2016-01-07 71 views
-1

我有兩個js文件,即myJs1.js和myJs2.js。 從myJs1.js調用myJs2.js的一個方法。如何從ajax成功事件返回多個值

我想回到r1r2到結果(myJs1.js)

我已經試過這樣:我 宣佈Ajax調用我加入後Ajax調用和 之前r1r2變量:

return [r1,r2]; 

但它返回r1r2作爲undefined。 當我研究了我遇到的問題時,添加async: false可以工作,但它有很多問題(如瀏覽器凍結)。即使如此,我嘗試了它,仍然無法獲得r1和r2的值。

注意:我是第一次使用AJAX,因此牢記這一點。


編輯:在js1中有一個ajax調用,在成功事件中調用該方法。我想訪問結果調用另一個方法在JS1

編輯:看這裏的代碼

myJS1:

function method() 
{ 

$.ajax({ 
    type: "GET", 
    dataType: "json", 
    url: "http://127.0.0.1:8000/***/***", 
    success: function(response){ 
     result=methodOfmyJs2(response); 
     load1(r1); //r1 from result 
     load2(r2); //r2 from result 
    } 
}) 

}

myJs2:

function methodOfmyJs2(data) 
{ 
    $.ajax({ 
    type: "GET", 
    data:SomeData, 
    dataType: "json", 
    url: "http://127.0.0.1:8000/***/***", 
    success: function(response){ 
     r1=anotherMethodFromThisJS1(response); 
     r2=anotherMethodFromThisJS2(response); 
     result=[r1,r2] 
    } 
}) 

}

我需要訪問r1和r2的值來調用myJs1的load1和load2方法。

+5

wtf this _is_ jquery –

+2

您不能從異步操作返回值。這個不成立。而你已經在使用jQuery。 – Pointy

+2

可能重複的[如何從異步調用返回響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – nem035

回答

2

您可以改爲使用回調。

[編輯]

myJS1:

function method() { 
    $.ajax({ 
     type: "GET", 
     dataType: "json", 
     url: "http://127.0.0.1:8000/***/***", 
     success: function (response) { 
      methodOfmyJS2(function (r1, r2) { 
       load1(r1); 
       load2(r2); 
      }); 
     } 
    }); 
} 

myJS2:

methodOfmyJs2 (callback) { 
    $.ajax({ 
     type: "GET", 
     data: somedata, 
     dataType: "json", 
     url: "http://127.0.0.1:8000/****/****", 
     success: function (response) { 
      var r1 = anotherMethodFromThisJS1(response); 
      var r2 = anotherMethodFromThisJS2(response); 

      callback(r1, r2); 
    }); 
} 
+0

謝謝您的快速回復。我編輯了問題代碼「方法調用有一個參數」數據「」。那個怎麼樣。 –

+0

你可以再看看這個問題嗎,我現在已經正確編輯了。不方便的。 –

+0

我無法理解你想要在編輯中說些什麼。你想訪問一個Ajax調用的結果到另一個Ajax調用? – 11thdimension

2

Ajax調用asynchronous默認情況下,這意味着Ajax調用函數jQuery.ajax()不會等待HTTP響應回來在返回之前。

爲了在HTTP響應到達後獲取數據,我們必須提供一個回調函數,即success函數。如果你想在另一個函數中獲取這個數據,只需在success回調中調用該函數即可。

以下是代碼:

//JS1. 
function processResponse(r1, r2) { 
    // do processing here with r1 and r2 
} 

//JS2. 
function methodOfmyJs2() 
{ 
    $.ajax({ 
     type: "GET", 
     data:somedata, 
     dataType: "json", 
     url: "http://127.0.0.1:8000/****/****", 
     success: function(response){ 
      r1=anotherMethodFromThisJS1(response); 
      r2=anotherMethodFromThisJS2(response); 

      //calling the success callback 
      processResponse(r1, r1); 
     } 
    }); 
} 

還有另一種選擇,如果你真的想這樣做,你可以讓你的Ajax調用synchronous像下面。

$.ajax({ 
    type: "GET", 
    url: remote_url, 
    async: false,//now call is synchronous 
    success : function (data) { 
    } 
}); 

現在jQuery.ajax()會等到HTTP響應到達,那麼你可以從methodOfmyJs2()返回[r1, r2]

但是,您應該避免進行同步調用,因爲它會使JS線程等待凍結UI。

+0

你可以再次看看這個問題,我現在已經正確編輯了。不方便的。 –

0

$.ajax回報promise,可與then

function getAjaxOutput() { 
    request1().then(function(data){ 
     // get data from request 1 and pass to request 2 
     return request2(data);   
    }) 
    .then(function(data){ 
    // get data from request2 
    $('#output').text(JSON.stringify(data)); 
    }) 
    return false; 
} 

被鏈接嘗試 https://jsfiddle.net/je7wf4ww/

和如果u想從getAjaxOutput返回平原結果 - U根本不能(未做要求同步當然) - 你需要返回承諾這是一個圍繞Ajax調用的包裝,並再次鏈接它then