我有一张通过AJAX提交的表单。当我单击提交时,它会给我一个语法错误:
SyntaxError: syntax error
[Break On This Error]
<!DOCTYPE html>
它引用第31行,这是这行代码:
var formResponse = eval(msg);
以下是完整的AJAX代码:
function jqsub() {
var $f = $('#email-form');
var $m = $('#success-message');
$.ajax({
type: 'POST',
url: $f.attr('action') + '&JSON=1',
data: $f.serialize(),
success: function(msg) {
var formResponse = eval(msg);
if (formResponse.FormProcessV2Response.success) {
$f.fadeOut();
$m.fadeIn().html('<p>Thank you for joining our mailing list.</p>');
}
},
error: function(msg) {
alert('error'+msg);
return false;
}
});
}
此语法错误意味着什么以及如何解决此问题?
注意:我使用的是名为Business Catalyst的CMS,FormProcessV2Response
是其系统的一部分。
答案 0 :(得分:5)
url: $f.attr('action') + '&JSON=1'
应该是
url: $f.attr('action') + '&JSON=1'
这将使它实际返回JSON。您只在HTML中使用&
- 您可能已经从链接属性或其他内容中复制了此内容。
此外,由于您使用的是jQuery,而不是使用eval
,因此您可以使用$.parseJSON
。或者更好的是,在dataType: 'json'
选项中设置$.ajax
,然后按原样使用msg
! (即使你不是,JSON.parse
仍然会更好。)
答案 1 :(得分:1)
您的服务器响应包含HTML,而不是JSON。您评估JSON,因为JSON是JavaScript的子集。你不能评估HTML,它不是有效的JavaScript。