jQuery AJAX – 意外的令牌+ parsererror
我今天用jQuery和AJAX编写了一个脚本,我收到了一些错误……
剧本:
function changeAdmin(id) { $(document).ready(function() { $('#ta-modarea-'+id).fadeOut('fast'); $('#ta-m-loading-'+id).fadeIn('fast'); $.ajax({ type: 'POST', url: 'ajax_utf.php?a=changeteamadmin', dataType: 'json', data: { admin : $('#admin-id-'+id).val() }, success: function(data) { $('#ta-m-loading-'+id).fadeOut('fast'); $('#ta-modarea-'+id).text(data.msg).fadeIn('fast'); }, error: function(jqXHR, textStatus, errorThrown) { $('#ta-m-loading-'+id).fadeOut('fast'); $('#ta-modarea-'+id).text('HTTP Error: '+errorThrown+' | Error Message: '+textStatus).fadeIn('fast'); } }); return false; }); }
运行后,我收到此错误消息: HTTP Error: SyntaxError: Unexpected token < | Error Message: parsererror
HTTP Error: SyntaxError: Unexpected token < | Error Message: parsererror
你能帮帮我吗,我该怎么办?
你需要通过PHP发送一个application/json
头,如下所示:
header('Content-type: application/json');
那是因为jQuery发送了一个Accept标头( application/json, text/javascript
),这是由parseerror
触发的jqXHR
的原因。
尝试
alert( jqXHR.responseText);
在你的错误function
如果您已尝试设置标头内容类型并仍然收到错误。 我希望服务器回复您的服务器端代码中的错误。 通常在给出调试消息时,它是纯HTML而不是JSON,因此是意外的令牌。
调试此方法的最快方法是设置HTML的DataType而不是JSON,以便您可以从服务器看到任何输出,而不仅仅是JSON格式的数据。
一旦您看到服务器端代码生成的错误并修复它,您就可以返回到JSON的DataType。
contentType:“application / json; charset = utf-8”,
尝试下面的代码,但是如果你收到“Unexpected token <”这样的错误,你需要检查你的php文件 - “ajax_utf.php”并检查浏览器中返回的内容(Chrome)View-> Developer-> Developer Tools,Network选项卡 – > XHR。
$.ajax({ type: 'post', url: postLink, dataType: 'json', data: postData, beforeSend: function (x) { if (x && x.overrideMimeType) { x.overrideMimeType('application/json;charset=UTF-8' ); } }, success: function (result) { //console.log(result); }, error: function (xhr, ajaxOptions, thrownError) { console.log(arguments); } });
这可能是错误匹配PHP关联/数字数组和Javascript对象的问题。
试试这个:
$data = new Array(); $data['test'][] = "Row 1"; $data['test'][] = "Row 2"; echo json_encode($json, JSON_FORCE_OBJECT);
这应该强制json编码器始终编码到对象而不是数字数组,并可以解决问题。