0
function checkname(o) {
    var o = $('#log').val();                
    $.ajax({
        url: 'check_name',
        type: 'POST',
        data: 'username=' + o,
        success: function(o){
            if(o == 1) {
                 return o;
            }
            else {
                 o.addClass( "ui-state-error" );
         updateTips( "not available" );
         return false; 
            }
        }
  });
}

与模型中的表格相关的此功能是否可用

$( "#dialog-form" ).dialog({
     autoOpen: false,
     height: 600,
     width: 550,
     modal: true,
     buttons: {
    "save": function() {
        var bValid = true;
        allFields.removeClass( "ui-state-error" );

        bValid = bValid && checkname ( name, "name");


        if ( bValid ) {
                $.ajax({
            type: 'POST',
            url: 'add_user',
            data: $('#myform :input').serialize(),

            success: function(i) {
                alert('sucess');
                            window.setTimeout(function(){location.reload()},500)

            }
        });
        $( this ).dialog( "close" );
    }
    },
    Cancel: function() {
    $( this ).dialog( "close" );
    }
   },
   close: function() {
     allFields.val( "" ).removeClass( "ui-state-error" );
   }
});

当我单击保存表单时不会保存或仅在萤火虫中不会关闭返回 1

我想如果名称可用表格保存

4

2 回答 2

1

checkname由于 AJAX 调用是异步的,因此您不能通过从成功回调中返回来从函数中返回某些内容。

使用回调方法处理结果:

function checkname(o, whenValid) {
  var o = $('#log').val();
  $.ajax({
    url: 'check_name',
    type: 'POST',
    data: 'username=' + o,
    success: function (o) {
      if (o == 1) {
        whenValid();
      } else {
        o.addClass("ui-state-error");
        updateTips("not available");
      }
    }
  });
}

$("#dialog-form").dialog({
  autoOpen: false,
  height: 600,
  width: 550,
  modal: true,
  buttons: {
    "save": function () {
      allFields.removeClass("ui-state-error");

      checkname(name, function(){

            $.ajax({
                type: 'POST',
                url: 'add_user',
                data: $('#myform :input').serialize(),

                success: function (i) {
                    alert('sucess');
                    window.setTimeout(function () {
                        location.reload()
                    }, 500)

                }
            });
            $(this).dialog("close");

      });


    },
    Cancel: function () {
        $(this).dialog("close");
    }
  },
  close: function () {
    allFields.val("").removeClass("ui-state-error");
  }
});
于 2013-02-26T08:08:37.923 回答
0

在第一个 ajax 函数中,您从成功函数的范围内返回,但 checkname 函数不返回任何内容。即使这样做了,ajax 也是异步的,所以返回返回数据的值是行不通的。

在开始使用数据之前,您必须等待 ajax 调用完成,您可以通过使用 ajax 函数的延迟返回来做到这一点,如下所示:

function checkname(name) {
    return $.ajax({
        url: 'check_name',
        type: 'POST',
        data: {username : name}
    });
}

你会像这样使用:

$("#dialog-form").dialog({
    autoOpen: false,
    height: 600,
    width: 550,
    modal: true,
    buttons: {
        save: function () {
            allFields.removeClass("ui-state-error");
             //whatever "name" is ?
            checkname($('#log').val()).done(function(data) {
                if (data==1) {
                    $.ajax({
                        type: 'POST',
                        url: 'add_user',
                        data: $('#myform :input').serialize()
                    }).done(function(data2) {
                        //why use ajax only to reload the page ?
                        alert('sucess');
                        window.setTimeout(function () {
                            location.reload();
                        }, 500);
                    });
                    $(this).dialog("close");
                }
            });
        },
        Cancel: function () {
            $(this).dialog("close");
        }
    },
    close: function () {
        allFields.val("").removeClass("ui-state-error");
    }
});

此外,您似乎到处都在使用相同的变量。checkname 函数的参数是o,在函数内部你有一个新的变量叫做o,然后你o在ajax函数中使用,你应该尝试更有创意吗?

于 2013-02-26T08:11:21.323 回答