我有一个表单来调用ajax进行后端处理,所有输入都将存储在表中并返回'success'以通知用户提交成功。但是我在回调期间面临一个问题,输入数据可以保存到表中,但回调停止,下面有错误,我不知道出了什么问题,同样的脚本被应用到另一个表单(具有不同的表单字段)工作得很好,请帮助解决。
控制台日志(Chrome):
Uncaught TypeError: Cannot read property 'length' of undefined
m.extend.each
$.ajax.success
j
k.fireWith
x
b
火狐
TypeError: a is undefined
...rCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e...
脚本:
$(document).ready(function() {
$("#status").hide();
$('#btn_submit').click(function(){
var params = $('#project_form').serialize();
var btn = $(this);
btn.button('loading')
$.ajax({
url: baseurl + '/process_form.php',
type: 'POST',
data: params,
dataType: 'json',
success: function(response){
if(response.success == 'success'){
$('#status').html('<b>Thank you</b>').show();
$('html,body').animate({
scrollTop: $('#top').offset().top
},500);
}else{
$('[id$="_error"]').html('');
$.each(response.error, function(key, value){
if(value){
$('#' + key + '_error').html(value);
}
});
}
},
error: function(){
console.log(arguments);
}
}).always(function(){
btn.button('reset')
});
});
});
答案 0 :(得分:0)
第一:当你想使用提交时使用ajax时请不要使用提交点击..使用表单提交更好
$('#project_form').on('submit',function(){
var params = $(this).serialize();
第二:如果成功你在process_form.php中回应('成功')你应该使用
if(response == 'success')
并使用response
代替response.error
答案 1 :(得分:0)
您的问题是您使用success
回调方法的方式。手册说:
请求成功时要调用的函数。该函数传递三个参数:从服务器返回的数据,根据dataType参数或dataFilter回调函数格式化(如果指定);描述状态的字符串;和jqXHR(在jQuery 1.4.x,XMLHttpRequest中)对象。
因此除非您自己确保从正在执行ajax的网址返回,否则不会传递.success
或.error
。 (如果您这样做,那么请不要阅读我的其余部分,并使用Element Inspector查看.success
和.error
是否实际位于返回的数据中。)
所以现在你的if (response.success == "success")
是假的,因为它实际上是未定义的。并且response.error
也未定义,因此$.each(response.error, ...)
会解决您的问题,因为您无法.each
未定义。
假设您成功是正常的,因为您在成功处理程序中。