这是我的代码:
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
答案 0 :(得分: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 docs:
答案 1 :(得分:0)
解决这个问题的一个想法是: 创建隐藏的输入类型
<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 );