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编码器始终编码到对象而不是数字数组,并可以解决问题。