jquery模型表

时间:2013-02-26 08:00:33

标签: jquery

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" );
   }
});

当我点击保存表单时不会保存或只会在firebug return 1

中关闭

如果名称可用,请保存

2 个答案:

答案 0 :(得分:1)

由于AJAX调用是异步的,因此无法从成功回调中返回checkname函数中的某些内容。

使用回调方法处理结果:

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");
  }
});

答案 1 :(得分:0)

在第一个ajax函数中,您从success函数的范围内返回,但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的新变量,然后在ajax函数中使用o,你应该尝试成为一个更有创造力?