2015-02-08 74 views
1

成功的結果我有一個很難搞清楚如何得到的jQuery/AJAX的成功結果。我試圖調用外部函數來確保..將結果設置爲全局是.. global?我瞭解範圍的工作原理,但似乎並不適用於此。所以也許我不明白關於jQuery的範圍?以下是我現在的位置 - 大量的試驗和錯誤。在這種情況下,對數據['測試']使用警報給我我正在尋找的結果,但是當我調用setSession()時,session_results不起作用。

*編輯 - 我只注意到,該腳本不會等待。員額$來完成,所以是我的問題。回調函數,根據其他問題在這裏問。任何人都有一個例子或建議?否則,該線程可以關閉。

**編輯 - 感謝的Cuong樂。

// SESSION 
var session_results; 
function setSession(data) { 
    session_results = data; 
} 
function SESSION() { 
    $.post(
     "handler.php", 
     { get_session: "get_session" }, 
     function(data) { 
      alert(data['test']); 
      setSession(data); 
     }, 
     "json" 
    ); 
} 

SESSION(); 
alert(session_results['test']); 
+0

我剛剛注意到腳本似乎沒有等待$ .post完成。看起來我必須重新組織。 – Daniel 2015-02-08 03:58:02

回答

1

你應該等到阿賈克斯後完成,那麼你能在jQuery的正確提醒alert(session_results);,使用承諾概念:

var session_results; 
function setSession(data) { 
    session_results = data; 
} 

function SESSION() { 
    var promise = $.post(
     "handler.php", 
     { get_session: "get_session" }, 
     function(data) { 
      alert(data['test']); 
      setSession(data); 
     }, 
     "json" 
    ); 

    return promise; 
} 

var result = SESSION(); 

result.done(function(){ 
    alert(session_results); 
}); 

有關更多修正,你應該使用jquery的新語法AJAX使用done功能:

function SESSION() { 
    var promise = $.post("handler.php", { get_session: "get_session" }) 
        .done(function(data) { 
         alert(data['test']); 
         setSession(data); 
        }); 

    return promise; 
} 
+0

我該如何在其中包含「json」?或者它會自動處理?我猜(「handler.php」,{get_session:「get_session」},「json」) – Daniel 2015-02-08 04:10:53

+0

@Daniel:它自動處理,你應該閱讀http://api.jquery.com/jquery.post/瞭解更多細節 – 2015-02-08 04:12:26

+0

是的。我一直在閱讀。倒數第二個例子是我開始返回json編碼結果的地方。但是,正如Shahar指出的那樣,我被卡住了,AJAX的異步特性(har har)並沒有意識到。 :幹嘛,我覺得沒有注意到它很愚蠢。 – Daniel 2015-02-08 04:17:42

0

這是因爲AJAX代表異步 JAV aScript和XML。不保證你的下一個電話會完成。所以,你可以做的卻是:

​​

或者你可以使用$.ajaxasync關閉。