2016-09-23 60 views
0

我有一個jQuery代碼看起來像下面jQuery的:Ajax不是被稱爲第一

function get_data_obj(){ 
    var dataObj; 
    $.ajax({ 
     url: "XXX.soesite.XXX", 
     success: function(result) { 
      dataObj = ['Hi']; 
      console.log("Inside ajax"); 
      console.log(dataObj); 
     } 
    }); 
    console.log("Outside ajax"); 
    console.log(dataObj); 
} 
get_data_obj(); 

我期待的輸出是

裏面AJAX
[ '嗨']
外ajax
['Hi']

但是輸出我越來越喜歡這個

外阿賈克斯
不確定
的內部結構是阿賈克斯
[「嗨」]

我真搞不清楚我的函數的控制流。基本上,我的功能首先應該是ajax,然後打印其他語句,但不幸的是我的功能沒有按我期望的那樣工作。任何人都可以告訴我在我的代碼中出現了什麼問題,我該如何讓我的函數先完成Ajax工作然後再繼續下去?

+2

AJAX是異步的,它會當它得到響應打印。想象一下,它就像一個函數調用,每當它完成時它將返回一個值,但它不會中斷流調用它的原始函數。此外,嘗試'async:false' - 這應該做你想做的。請記住,這更多的是「知道某事,但不使用它」。 –

+0

感謝@MageshKumaar的幫助。有效。 –

回答

1

$.ajax是異步的,如果您沒有另外指定,則爲默認值。

,如果你想操作給$.ajax請求之後發生,那麼你應該將其包含在done()/success()/fail()功能或設置asyncfalse

function get_data_obj() { 
    var dataObj; 

    $.ajax({ url: "XXX.soesite.XXX", async: false, success: function(result) { 
     dataObj = ['Hi']; 
     console.log("Inside ajax"); 
     console.log(dataObj); 
    }}); 

    console.log("Outside ajax"); 
    console.log(dataObj); 
} 

get_data_obj(); 
+1

非常感謝。這工作。 –

+0

@ChiyaanSuraj請注意,同步呼叫折舊,並不建議您使用上述解決方案。 –

+0

@MageshKumaar - 這就是爲什麼我的第一個建議是在ajax調用的'done()'狀態調用下一部分代碼 – Ted

0

請記住以下電話時AJAX

異步:假(默認值)=代碼暫停。 (其他代碼正在等待此..)

Async:True =代碼並行運行。沒有什麼可以暫停

因此,jquery不會等待先完成請求。

可以使用)由$阿賈克斯(提供的回調掛鉤