我正在使用表单进行jquery验证。我想使用ajax提交表单。当我把ajax调用放在validate的submitHandler()时浏览器挂起。发生了什么事?
启用validate方法调试时收到的错误消息是:
未被捕的例外:[例外...... “对WrappedNative的非法操作 原型对象“nsresult: “0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)” 位置:“JS框架:: http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js :: f ::第132行“数据:否]
这对我来说太神秘了。
一些代码:
$(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);
}
});
}
});
});
表格非常香草形式。通过标准POST提交工作正常。此外,验证工作正常......只是提交ajax部分使我失望。
答案 0 :(得分:3)
您可能希望在发送之前序列化该表单 - 您可能不想发送DOM对象
编辑RE:评论 - 仅选择一些输入并序列化 -
$(form).find(":input[name=inp1] :input[name=inp2]").serialize()
答案 1 :(得分:3)
使用php函数调用ajax方法
<script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/validate/jquery.validate.js"></script>
class Ajax{
public function submitForm($data=array()){
//form - name attribute
//do - ajax page do_
// get - ajax result
return '<script language="javascript" type="text/javascript">
$(document).ready(function (data){
$(\'form[name='.$data['form'].']\').validate({
submitHandler: function(form) {
$.ajax({
method : \'post\',
url : \'' . AJAX_PATH . ''. $data['do'].'\',
data : $(this).serialize(),
dataType : \'html\',
success : function(data){
$(\'form[name='.$data['form'].']\').slideUp(1000);
$(\''. $data['get'] .'\').html(data).fadeIn(1000);
//$(\''. $data['get'] .'\').html(data).fadeIn(1000);
},
error : function(data) {alert(\'missing file\'); }
});
return false;
}
});
});
</script>';
}
}
$ajax = new Ajax();
<?php echo $ajax->submitForm(array('do'=>'do_register.php','form'=>'register','get'=>'#message'));?>
答案 2 :(得分:2)
只是详细说明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对象。