【问题标题】:Single quotes in JSON from PHP causing problems来自 PHP 的 JSON 中的单引号导致问题
【发布时间】:2011-06-11 04:05:16
【问题描述】:

注意: 这是一个完全不同的问题,直到我意识到问题的真正所在。

我当前的问题是我正在尝试从 PHP 输出一些 JSON 以供 jQuery 使用。我正在做这个跨域,所以我使用“JSONP”。我已将问题缩小到我的 JSON 中有单引号这一事实,所以当我使用回调函数输出时,我最终得到了太多的单引号。
我尝试在 PHP 中调用 str_replace("'","\'",$value),它似乎在我的 JSON 中输出为 \\',而不是 \',这显然是 jQuery 无法读取的(尽管在线 JSON 验证器说 JSON 是有效的。

所以我需要知道的是如何在 PHP 中的字符串中只获得一个斜杠而不是 2 个斜杠。

【问题讨论】:

  • 在下面查看我的答案。另外,回复:**EDIT2**,使用"\\'"。单引号不需要在双引号内转义,但是反斜杠可以。 (只是转义了错误的字符)

标签: php jquery json cross-domain str-replace


【解决方案1】:

我正在收集的是:

jQuery 使用_ 作为 JSONP 请求的回调参数。它会自动附加?_=jQuery<random_numbers>,基本上告诉服务器在返回时调用这个唯一的函数名。因此,最近(我想说的是去年).ajax 负责为您创建一个回调函数,然后将其“重新路由”到您在 success 属性中指定的函数。

此外,您的 PHP 代码使用的是 $_GET['callback'],而它现在应该使用 $_GET['_'](以便与 jQuery 及其发送的内容保持一致)。

“未调用 jQuery”只是 jQuery 通知您预期的回调未包含在响应中,并且它正在寻求确保它被调用。

简短的答案(如我所见)参考 $_GET['_'] 而不是 $_GET['callback'] 以满足 jQuery。

【讨论】:

  • 您可能对“_”与“回调”是对的,但这不是我的问题。就像我说的,这个精确的设置非常适合返回不同 JSON 的不同按钮。问题是我的 JSON 中的单引号,所以我可能应该问一个完全不同的问题,因为它现在是关于通过 PHP 输出 JSON。不过感谢您的回复。
【解决方案2】:

尝试在你的 PHP 中使用它:

echo $_GET['callback'] . '(' . json_encode($your_array_data) . ')';

问候。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    相关资源
    最近更新 更多