如何从ajax事件中获取返回值?

时间:2014-01-21 07:23:59

标签: jquery ajax post

这是我的代码:

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

2 个答案:

答案 0 :(得分:0)

问题

的Ajax

...调用是异步的。这意味着如果要在执行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 );