2017-02-15 36 views
0

我正在做一個GET請求,並在函數內部使用jQuery,並試圖設置一個在該函數中聲明的變量和結果。但是,它出現未定義。我在這裏錯過了這個概念嗎?我怎樣才能做出這樣的作品?謝謝。從jQuery AJAX結果設置函數變量

function doSomething1() { 
    var x; 
    $.get(window.location.href, { q: 'stuff', q2: $('input').val() }, function(data){ 
     // value shows up 
     console.log(data); 
     x = data; 
    }); 
    return x; 
} 

function doSomething2() { 
     // comes up as undefined. 
     console.log(doSomething1()); 
} 

doSomething2(); 
+0

你的回報是被稱爲響應來自您的Ajax調用之前,一旦它是異步的。這就是爲什麼你的'x'是未定義的 – andrepaulo

+0

我也嘗試在回調函數中放置「return x」。似乎這是合乎邏輯的,但並不重要。我會看看重複。謝謝! –

回答

1

這是$ .get()請求的異步效應的一個錯誤。在獲得有機會做任何事情之前,您將返回x。繞過異步功能需要一段時間。

事件的順序如下:

  1. doSomething2()呼叫doSomething1()
  2. doSomething1()限定x沒有值開始GET請求,並返回undefined
  3. doSomething2()日誌返回x
  4. 的GET請求完成並處理其成功的功能
+0

當我將回報放在GET請求的回調中時,它不起作用的原因是什麼? –

+0

如果您的函數在繼續之前等待GET完成,則會有延遲。您的啓動功能將繼續,因爲GET請求並行運行,您必須準備好何時單獨完成。您已經在成功函數中使用'console.log(data)',這是您應該處理需要這些數據的任務的地方。 – Gwellin

+0

謝謝。這使得。所以它看起來好像我必須在回調本身中處理數據,或者將它從處理它的回調中傳遞到另一個函數中。 –