JS:回调函数没有执行

时间:2013-04-13 06:21:36

标签: javascript jquery callback synchronous

我已经按照JS代码提交表单,我在一个名为submitForm的函数中保留了表单提交,因此只需传递selectoraction就可以使用多个表单submitForm函数的值。

function submitForm(selector, action, onComplete) {
  var response
  $(selector).submit(function (e) {
    e.preventDefault();
    var data = $(this).serializeArray();
    $.ajax({
      type: 'POST',
      url: action,
      data: data,
      dataType: 'json',
      a
      sync: false,
      success: function (data) {
        response = data;
      }
    });
  });
  return response;
}
submitForm(".lform", "user.php", function (response) { // Callback function
  // Doing necessary stuff
});

在上面的代码中,回调函数没有执行,可能是什么原因?在内部回调函数中,代码就在那里,

location.reload(); // To refresh the total DOM,
$(".c_form").dialog({
  closeOnEscape: false,
  title: title,
  modal: true,
  close: function () {
    $(this).dialog('destroy').hide();
  }
});

我想在完成页面重载后显示对话框,是否可以?

2 个答案:

答案 0 :(得分:2)

无法返回response。那时,它仍然是undefined,因为AJAX还没有放置data

您的回调函数是第三个参数onComplete。在AJAX成功后,执行它并传递它data

success: function (data) {
  onComplete(data);
}

答案 1 :(得分:2)

我同意@Joseph the Dreamer并且还添加错误回调,你的请求可能有错误,因此成功回调没有执行,就像成功回调一样添加它:

error: function () {
  alert("ERROR!!");
}

并且你的代码也不能以这种方式显示对话框,你在调用reload方法后渲染对话框,这会创建一个新的DOM元素,其中上一页不能对新页面做任何事情(重新加载后),我的建议是发送一个查询字符串param指示显示像domain.com/smth?show_dialog=1这样的对话框,并在你的JS页面加载检查是否存在该param以显示该对话框。