【问题标题】:jQuery AJAX - Unexpected token + parsererrorjQuery AJAX - 意外的令牌 + 解析器错误
【发布时间】:2011-11-19 09:35:32
【问题描述】:

我今天使用 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

你能帮我吗,我该怎么办?

【问题讨论】:

  • 如果您直接在 javascript 之外调用 ajax_utf.php?a=changeteamadmin 会发生什么?
  • 它显示了我在 PHP 文件中的信息。
  • 能否检查返回的json是否有效?您可以在 www.jsonlint.com 上查看
  • 它不喜欢 jQuery 代码 .. :(

标签: jquery ajax xmlhttprequest parse-error


【解决方案1】:

您需要通过 PHP 发送一个 application/json 标头,如下所示:

header('Content-type: application/json');

那是因为jQuery发送了一个Accept头(application/json, text/javascript),这就是jqXHR触发parseerror的原因。

【讨论】:

  • 你知道如何在 asp.net 中解决这个问题吗?
  • 要解决这个问题是 ASP.NET (webforms),您可以将 [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 属性添加到您的方法中。
【解决方案2】:
【解决方案3】:

如果您已尝试设置标题内容类型,但仍然收到错误消息。我期望服务器从您的服务器端代码中回复错误。通常,当给出调试消息时,它是纯 HTML 而不是 JSON,因此是意外的标记。

调试此问题的最快方法是设置 HTML 的 DataType 而不是 JSON,这样您就可以看到来自服务器的任何输出,而不仅仅是 JSON 格式的数据。

一旦您看到服务器端代码产生的错误并修复它,您就可以恢复为 JSON 的 DataType。

【讨论】:

    【解决方案4】:

    contentType: "application/json; charset=utf-8",

    【讨论】:

      【解决方案5】:

      尝试下面的代码,但如果您收到类似“Unexpected token Developer->Developer 中返回的内容工具,网络选项卡 -> 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);
                  }
              });
      

      【讨论】:

        【解决方案6】:

        这可能是 PHP 关联/数字数组和 Javascript 对象不匹配的问题。

        试试这个:

        $data = new Array();
        $data['test'][] = "Row 1";
        $data['test'][] = "Row 2";
        echo json_encode($json, JSON_FORCE_OBJECT);
        

        这应该会强制 json 编码器始终编码为对象而不是数字数组,并且可能会解决问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-28
          • 1970-01-01
          • 2022-01-02
          • 2019-02-19
          • 2017-11-21
          • 2013-09-26
          • 2018-09-12
          • 2017-07-16
          相关资源
          最近更新 更多