1

我正在尝试使用 jQuerydialogbeforeClose功能。我正在检查用户表单数据的格式是否正确,如果没有,则返回falsebeforeClose以便用户重新输入信息。

对话框代码调用中的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在我的成功回调中进行设置。我也试过ajaxComplete,,,ajaxSuccess.done根据控制台,我没有尝试过任何设置myresult;我总是以:

Uncaught ReferenceError: myresult is not defined

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

4

4 回答 4

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按照他的建议进行。为了您的代码始终有效,您也应该添加它

于 2013-04-22T17:42:13.817 回答
1

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

您可以添加asyncfalse

 var myresult ="":
 $.ajax({
      type: "POST",
      url: url,
      data: $tgt.serialize(),
      async:false,
      success: function(data){
于 2013-04-22T17:43:06.277 回答
0

您的

var myresult

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

function submituserupdateform($tgt){

    var myresult;
于 2013-04-22T17:41:30.390 回答
0

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

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

于 2013-04-22T17:47:08.073 回答