php - 当 PHP 响应 header 包含 "application/json"时,JSON.parse 在 jQuery 中失败

标签 php jquery ajax json http-headers

试图解决这个问题时我有点头疼。要通过 Ajax 从 PHP 脚本请求一些 json 数据,我使用 jQuery 函数:

$.ajax({
    type: 'GET',
    cache: 'false',
    url: ajaxUrl,
    data: dataString,
    success: updatePage
});

如果我将 PHP header 中的内容类型设置为:

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

然后我从服务器的响应如下所示:

{"content":"new content"}

内容类型会自动设置为text/html。当 jQuery ajax 选项中的 dataType 未设置时,它使用默认的“智能猜测”。我强烈假设 jQuery 将响应数据识别为 json,因为 updatePage 被解析为一个对象。 updatePage 使用 JSON js 库(json2.js),并执行以下操作:

function updatePage(data) {
  $dataObj = JSON.parse(data); 
}

当ajax成功调用该函数时,一切正常。没有错误。 奇怪的是,如果我将 header 设置为上面的 application/json,JSON.parse 突然报告错误。如果我在 jQuery ajax 请求中将 dataType 设置为“json”,则会发生完全相同的错误。更改这些内容时,我从 PHP 脚本得到的响应看起来与上面的一模一样。 Firebug 中的错误如下所示:

JSON.parse
  $dataObj = JSON.parse(data); 

有点长,抱歉,但如果有人知道出了什么问题,我们将非常感谢他们的帮助。感谢您抽出时间。

最佳答案

这是因为您最终尝试双重解析返回值。

显式的 json 数据类型和 application/json MIME 类型的使用都会导致 jQuery 将返回的字符串解析为 JavaScript 对象。

因此,在这些情况下,您使用 JSON.parse() 是多余的。

关于php - 当 PHP 响应 header 包含 "application/json"时,JSON.parse 在 jQuery 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2365120/

相关文章:

php - 在 HTML5 中显示之前加载内容

javascript - AJAX/ASP.NET 问题

php - Ajax mysql 查询部分工作

javascript - JavaScript 函数执行可以被中断吗?

php cookie 不更新

php - xampp 安装。在安装 xampp/apache 时。我遇到错误,显示以下几行

php - 如何在 CentOS 8 中安装 php-curl?

php - 基于 PHP 和 jQuery 等开源的 Web 应用程序的含义

javascript - 渐进增强和初始显示状态

mysql 日期列为空值的 PHP 空字符串错误