簡體   English   中英

從ajax請求返回值到另一個函數

[英]return value from ajax request to another function

我正在嘗試將值從(transport)返回到調用函數,但似乎無法使其正常工作:

function createXMLHttpRequest( w )
{
  var urly = '/users/notes/' + w;
  var options = {
      method:'get'
    , onSuccess: function( transport )
      {
        x = transport.responseText;
        return x;
      }
    , onFailure: function( transport )
      {
        var response = transport.responseText;
        alert( "FAILED "+ response );
      }
  };
  new Ajax.Request( urly, options );
  alert( x );
}

var ai = $( 'addItem' );
ai.onclick = function()
{
  // -1 indicates new
  addnote( -1, null );
}

x始終會發出未定義的警報。 除非我將x分配給Ajax.Request例如x=new Ajax.Request(urly,options) 然后它將警告[Object object] 如何將transport.responseText的值返回給onclick函數?

您的請求不是asynchronous:false 因此,在請求完成之前x會收到警報,並且x設置為transport.responseText

您必須將請求設置為同步,或者在onSuccess方法中向x發出警報。

onSuccess的返回值被Ajax.Request丟棄。 不要退貨。

Ajax本質上是異步的。 您應該查詢服務器,然后在回調中處理響應。 因此,您不應嘗試在onclick函數中使用服務器值,而應在單獨的回調(onSuccess方法)中使用。

這是錯誤的!

在進行ajax調用時,您應該忘記考慮同步,而應該考慮異步! 將請求發送到某些url並發送一個回調函數,該請求將在請求返回一些數據后執行。

我為GET調用編寫了簡單的包裝器

// AJAX WRAPPER
MYPROJECT = {};
MYPROJECT.Ajax = (function() {
    return{

        // get data by AJAX call and return as plain text
        get:function(url, callback) {
            new Ajax.Request(url, {
                method: 'get',
                onSuccess: function(transport) {
                    var data = transport.responseText.evalJSON();
                    callback(data);
                }
            });
        }
    }    
})();

// USAGE  
MYPROJECT.Ajax.get('/ajax_json_echo/?foo=bar',function(data){

    alert(data);
    $('containerText').innerHTML = data.get_response.foo
}); 

您可以在這里查看運行中的代碼http://jsfiddle.net/wbDhY/1/

(請耐心等待,警告框應在2秒鍾內出現)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM