[英]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.