在AJAX完成之前没有发生成功功能

时间:2013-04-22 17:39:40

标签: jquery asynchronous

我正在尝试使用jQuery dialogbeforeClose功能。我正在检查用户表单数据是否格式正确,如果没有,请将false返回beforeClose,以便用户重新输入信息。

对话框代码调用submituserupdateform

中的函数beforeClose
.dialog({beforeClose: function () {
  formresult=submituserupdateform($('#myaccountdialog').find('form'));
  if (formresult !="okay"){
    return false;
 }
}})

submituserupdateform函数检查代码中是否有错误:

function submituserupdateform($tgt){
  var url='./includes/admin/user/myaccount.php';
  $.ajax({
      type: "POST",
      url: url,
      data: $tgt.serialize(),
      success: function(data){
        $("#myaccountdialog").html(data);
        if ($('.error').length){
          var myresult= "notokay";
        } else {
          var myresult ="okay";
        }
      },
      dataType: "html"
    });
   return myresult;
}

我搜索过,发现https://stackoverflow.com/questions/1632039/return-value-from-ajax-call,但我已经在成功回调中设置了myresult。我还尝试了ajaxCompleteajaxSuccess.done。根据控制台,我没有尝试过设置myresult;我总是最终得到:

Uncaught ReferenceError: myresult is not defined

这一定是一个简单的错误,如果你看到我的错误,请帮助我!

4 个答案:

答案 0 :(得分:1)

那是因为myresult的范围仅限于成功阻止。在外面声明

function submituserupdateform($tgt){
  var url='./includes/admin/user/myaccount.php';
  var myresult;
  $.ajax({
      type: "POST",
      url: url,
      data: $tgt.serialize(),
      success: function(data){
        $("#myaccountdialog").html(data);
        if ($('.error').length){
          myresult= "notokay";
        } else {
          myresult ="okay";
        }
        return myresult;

      },
      dataType: "html"
    });

}

而且,正如@Mohammad Adil指出的那样,在formResult之前执行的以下代码有可能被赋予来自AJAX的值

if (formresult !="okay"){
    return false;
 }

在这种情况下,您可以按照他的建议使用async = false。为了您的代码始终工作,您也应该添加它

答案 1 :(得分:1)

ajax的异步行为会使你的函数在ajax成功回调之前返回 - (这是你不想要的

您可以添加asyncfalse

 var myresult ="":
 $.ajax({
      type: "POST",
      url: url,
      data: $tgt.serialize(),
      async:false,
      success: function(data){

答案 2 :(得分:0)

你的

var myresult

不是全局可用的函数声明它像这样

function submituserupdateform($tgt){

    var myresult;

答案 3 :(得分:0)

$ .ajax是异步的,这意味着它会发布请求并立即返回。当ajax请求在后台运行时,正常的脚本执行将继续。

当ajax请求在后台保持对话框打开时运行时,您应该做的是显示一些等待图标。一旦ajax请求返回,使用ajax事件处理程序处理结果,并根据结果关闭对话框或保持打开状态显示错误信息。