【问题标题】:Ajax issues, Invalid JSONAjax 问题,无效的 JSON
【发布时间】:2011-03-22 20:29:10
【问题描述】:

我正在构建简单的 Ajax 应用程序(通过 jquery)。我有奇怪的问题。我找到了问题所在,但我不知道如何解决它。

这是简单的服务器端 php 代码:

<?php
require('some.php');
$return['pageContent'] = 'test';
echo(json_encode($return));
?>

在客户端,抛出错误“Invalid JSON”。

我发现如果我删除 require 函数,一切正常。

仅供参考,“some.php”是一个空的 php 文件。打开直接php文件时没有错误。

所以,结论:如果我想使用 ajax,我不能使用 require 或 include 函数?

【问题讨论】:

  • 能贴出客户端代码吗?
  • 使用 Firefox 中的 Firebug 或 Chrome 中的开发者工具检查哪个服务器向您发送了这个问题,这应该可以解开谜团。
  • 当您在浏览器中查看该脚本时会发生什么?它是否显示有效的 JSON 对象?
  • @Ivan:Chrome 有一套非常强大的原生工具。只需使用 CTRL-SHIFT-J(或 MAC 等效项)启动 Chrome 开发人员工具窗口(您可以将其停靠在主窗口或单独启动)。然后,您可以通过网络“选项卡”下的 XHR“按钮”查看 AJAX 响应(XmlHttpRequest 响应)
  • @FlakDiNenno 你在跟我说话吗? :)

标签: php json require


【解决方案1】:

使用 Firebug 查看您在 AJAX 调用期间实际返回的内容。我的猜测是某处存在 PHP 错误,因此您从调用中获得的不仅仅是 JSON(Firebug 会向您展示)。至于你的结论:单独使用 include/require 对 AJAX 调用绝对没有影响(假设没有错误)。

【讨论】:

  • 您好,感谢您的回答。我试图比较带有和不带有 require 函数的 JSON 代码。你说得对,当我使用 require 或 include 时,我在 JSON 的开头得到了额外的点。实际上,我在每个 PHP 和 html 文档的开头都有那个额外的点。那个额外的点造成了很多麻烦(例如,不能修改标头,标头已经发送)。那么为什么会有那个额外的点呢?会不会是 BOM 的问题?编辑:我使用 dreamwaver CS4 和 utf-8 编码
  • 它已修复。我使用了文件 BOM 检测器。
  • 很可能是上面讨论的 BOM。我多次遇到同样的问题并使用 Fiddler 检查 HEX 格式的文件并注意到之前的备份和我创建的新文件中不存在额外的 3 个字节。不知何故,我的原始文件被 Textpad 修改了。虽然当我在 Notepad++ 中创建它们时我很好。因此,请确保在创建、编辑和保存文件时正确设置您的编码和代码页,此外,如果您在 Windows 上开发并在托管服务提供商处发布到 Linux 环境,则还要在操作系统之间保持一致。
【解决方案2】:

尝试改变:

<?php
require('some.php');
$return['pageContent'] = 'test';
echo(json_encode($return));
?>

收件人:

<?php
$return = array(
    'pageContent' => 'test'
);
echo json_encode($return);
?>

问题可能与 $return 在使用前未声明为数组有关。

编辑: 好的,所以这可能根本不是问题。但!可能发生的情况是您可能会在响应中回显某些内容。例如,如果您在 JSON 之前有错误回显,您将无法在客户端解析它。

【讨论】:

  • $return['pageContent'] = 'test';等同于 $return = array('pageContent' => 'test');
【解决方案3】:

如果“some.php”是一个空的 php 文件,你为什么需要它?!

require 函数如果不能要求该文件,则会引发致命错误。尝试使用 include 函数,看看会发生什么,如果它有效,那么你可能遇到了 require 'some.php' 的问题;

【讨论】:

    【解决方案4】:

    require 调用不会产生任何影响。您需要在 Firebug 中检查返回的输出。如果使用 Chrome,则有一个名为 Simple REST Client 的插件。 https://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb可以快速查询资料。

    此外,发送回正确的 HTTP 标头以及显示响应类型的响应总是好的。

    【讨论】:

      【解决方案5】:

      这很可能是上面讨论的 BOM。我多次遇到同样的问题,并使用 Fiddler 以十六进制检查文件,并注意到以前的备份和我创建的新文件中不存在额外的 3 个字节。不知何故,我的原始文件被 Textpad(都在 Windows 中)修改了。虽然当我在 Notepad++ 中创建它们时我很好。

      因此,请确保在创建、编辑和保存文件时正确设置编码和代码页,此外,如果您在 Windows 上开发并发布到 Linux 环境您的托管服务提供商。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-28
        • 2021-03-16
        • 2017-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多