2011-03-03 75 views
3

我有以下的Ajax調用成功地執行:如何設置AJAX返回的值作爲變量

function fnFormatDetails (oTable, nTr) 
    { 
      var aData = oTable.fnGetData(nTr); 

      var memberid = 'memberid='+ aData[6]; 

      $.ajax({ 
       type: "POST", 
       url: "shout.php", 
       data: memberid, 
       success: function(html) { 
        //$("#shout").html(html); 
        var sOut = html.returned_val; 
       } 
      }); 

      return sOut; 
     } 

如果我刪除註釋掉線($(「吶喊」)HTML(HTML)和使用在我的頁面上顯示一個div,結果顯示正常,但是,第二個函數會使用sOut的HTML結果並相應地顯示在正確的位置。

shout.php中的PHP文件只是'echos'HTML到頁面(然後返回並相應地顯示。

我不是幸好無法根據我的ajax調用的結果設置當前的變量sOut。我錯過了什麼?

+1

不確定爲什麼我的問題是downvoted?適當的成員誰這樣做可能至少有禮貌解釋 – JM4 2011-03-03 00:06:36

+0

你確定它實際上擊中PHP服務器並給出適當的響應? – fazo 2011-03-03 00:45:24

+0

@fazo - 是的。如果它沒有,帶有(當前)註釋的返回變量將無法正確填充。 $(「#shout」)表示一個基於從PHP腳本返回的html填充的div。 – JM4 2011-03-03 18:40:21

回答

5

如果您希望自己的函數返回AJAX調用返回的內容,則需要同步進行調用。另外,假設「shout.php」的結果是明文。如果是JSON或其他,則需要在撥打電話$.ajax時設置dataType屬性。

function fnFormatDetails (oTable, nTr) { 
    var aData = oTable.fnGetData(nTr); 
    var memberid = 'memberid='+ aData[6]; 

    var result; 

    $.ajax({ 
     type: "POST", 
     url: "shout.php", 
     data: memberid, 
     async: false, 
     success: function(data) { 
      result = data; 
     } 
    }); 

    return result; 
} 
+0

感謝您的幫助。出於某種原因 - 結果不斷返回'未定義'。如果我取消註釋隱藏的div部分,數字會返回,因此我至少知道該調用正常工作 – JM4 2011-03-03 00:24:46

+0

有什麼想法?我已經嘗試了幾乎所有的方式,而不是去。 – JM4 2011-03-03 21:40:48

+1

@ JM4 - 我是個白癡,我最初在這裏寫'async:true',當時我應該寫'async:false'。我修復了我的答案。嘗試改變你的代碼。 – 2011-03-03 23:44:20

2

首先,您要在成功回調方法中定義sOut,因此它不適用於fnFormatDetails。

其次默認情況下$ .ajax以異步模式工作,因此無論何時調用「return sOut」,成功回調都不會執行!

我建議你從成功中調用一些方法來完成基於html.returned_val的過程,或者您可以在$ .ajax中傳遞async:false以使該調用同步。

+0

你的邏輯在第二段很有道理,但通過async:false進入ajax調用並不能解決問題。我不確定爲什麼成功回調方法不能真正在函數本身中使用細節。也許我沒有完全理解,但評論的代碼,如果取消註釋,能夠顯示具有指定的「喊」div的內容,如果有任何呼籲 – JM4 2011-03-03 00:09:54

1

謝謝@馬特哈金斯

異步:假

這個小代碼更改,修復了自早晨,我遇到的問題。 :)

+0

也爲我工作。非常感謝! – 2015-12-30 20:36:39

相關問題