使用jQueryvalidation上传表单,使用submitHandler()中的ajax …无效

我正在使用表单的jqueryvalidation。 我想使用ajax提交表单。 当我把ajax调用放在validate的submitHandler()时浏览器挂起。 这是怎么回事?

启用validate方法的调试时得到的错误消息是:

未捕获的exception:[exception……“WrappedNative原型对象上的非法操作”nsresult:“0x8057000c(NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)”位置:“JS frame :: http://ajax.googleapis.com/ajax/libs/jquery/1.4.2 /jquery.min.js :: f :: line 132“data:no]

这对我来说太神秘了。

一些代码:

$(document).ready(function() { $("#loginForm").validate({ debug: true, errorLabelContainer: $('div.error'), wrapper: 'li', rules: { last_name: { required: true } }, messages: { last_name: { required: "Please enter your last name." } }, submitHandler: function(form){ $.ajax({ type: "POST", url: "test.php", data: form, success: function(msg){ console.log( "Data Saved: " + msg ); }, error: function(msg){ console.log( "Error: " + msg); } }); } }); }); 

forms是一种非常香草的forms。 通过标准POST提交工作正常。 此外,validation工作正常…它只是提交与ajax部分失败了我。

您可能希望在发送之前序列化该表单 – 您可能不希望发送DOM对象

编辑RE:注释 – 仅选择一些输入并序列化 –

 $(form).find(":input[name=inp1] :input[name=inp2]").serialize() 

用php函数调用ajax方法

  class Ajax{ public function submitForm($data=array()){ //form - name attribute //do - ajax page do_ // get - ajax result return ''; } 

}

 $ajax = new Ajax(); submitForm(array('do'=>'do_register.php','form'=>'register','get'=>'#message'));?> 

只是详细说明tobyodavies的答案。 您可能想要将提交更改为

  $.ajax({ type: "POST", url: "test.php", data: $(form).serialize(), success: function(msg){ console.log( "Data Saved: " + msg ); }, error: function(msg){ console.log( "Error: " + msg); } }); 

ajax函数期望数据选项是一个字符串(不完全正确,但对于这种情况,它很好),而你传递表单dom对象。