2014-01-21 77 views
0

這是我的代碼:如何從ajax事件獲取返回值?

var noSubTasks = $.post('/taskuri/getTheNumberOfSubtasks/', { projectID: projectIdRow, taskName : result }, function(data2){ 
    var x = data2; 
}); 
alert(x); 

和消防錯誤表明我這個錯誤:

ReferenceError: x is not defined 
error source line: 
alert(x); 

誰能告訴我,爲什麼???以及如何將data2分配給變量? THX

+1

你不能這樣做,因爲ajax是異步的看到上面的鏈接,看看它是如何處理的 –

+0

我知道,但沒有某種棘手的方法或處理這個問題? thx – Chester

+0

**沒有沒有**(當然你可以做一個同步請求 - 但這不是一個解決方案) –

回答

0

一種IDEEA來解決這個問題將是: 要創建隱藏的輸入類型

<input type="hidden" id ="noSubTask"> 

向該DATA2分配給輸入類型值

var noSubTasks = $.post('/taskuri/getTheNumberOfSubtasks/', { projectID: projectIdRow, taskName : result }, function(data2){ 
$("#noSubtask").val(data2); 
}); 

之後,從隱藏輸入中獲取數值:

var getTheNumberOfSubtasks = $("#noSubtask").val(); 
alert(getTheNumberOfSubtasks); 
0

問題

阿賈克斯

...調用是異步的。這意味着,如果您想在執行ajax請求後直接訪問變量,則無法確定ajax請求是否已完成。你可以使用callback function來解決這個問題。

作用域

拋出異常,因爲x沒有在你的範圍界定。如果您要將var x = data2;更改爲window.x = data2;或僅更改x = data2;,則應該能夠在全局範圍內訪問(/警告)它。

由於變量範圍的非常好的補充,我建議您閱讀this post的答案。


[...]

$.ajax({ 
    type: 'POST', 
    url: '/taskuri/getTheNumberOfSubtasks/', 
    data: { 
    projectID: projectIdRow, 
    taskname : result 
    }, 
    done: function(data, textStatus, jqXHR) { 
    EvaluateAjaxResponse(result); 
    }, 
    fail: function(jqXHR, textStatus, errorThrown) { 
    // Errorhandling 
    } 
}); 

[...]

function EvaluateAjaxResponse(ajaxResponse) { 
    alert(ajaxResponse); 
    // Do whatever you want. 
} 

jQuery的文檔:

+0

ajax如何處理警報的異步調用會在調用ajax之前得到執行 –

+0

這段代碼介於循環,projectID,taskname之間是不同的。如果我提醒(x),它會返回錯誤的值。 – Chester

+0

仍然一樣,它顯示在控制檯中的錯誤 – Chester