【问题标题】:PHP Json not working with jsoncallbackPHP Json 不能与 jsoncallback 一起使用
【发布时间】:2018-03-26 10:15:13
【问题描述】:
$Data = 'jQuery1111014795648865074196_1507974360762({"type":"my","start":1,"end":20,"total":20})';
 $D2 = json_decode($Data);
echo $Result_Count = $D2->{'total'};

上面的代码对我不起作用,但如果我删除 jQuery1111014795648865074196_1507974360762() 那么它工作正常

工作示例

$Data = '{"type":"my","start":1,"end":20,"total":20}';
$D2 = json_decode($Data);
echo $Result_Count = $D2->{'total'}

【问题讨论】:

  • 这是什么 -> jQuery1111014795648865074196_1507974360762 它来自哪里?以及为什么要添加它?在哪一端它不起作用phpjQuery
  • 它来自 API。它是 jsoncallback ...我无法删除它,因为它来自 api。 PHP 端不工作...
  • 请出示您的代码。以及您能否提供 API url。(在您的问题中添加两者)
  • 由您来指定 JSONP 回调包装器。通常,jQuery 会自己传递一个名为“callback”的 get 参数,其中包含允许您检索有效负载的临时回调名称。
  • Geolim4 @ 是的,你是对的,但 API 中没有回调,返回结果为 null ....

标签: php jquery json api call


【解决方案1】:

如果 jQuery1111014795648865074196_1507974360762 是静态的,那么您可以使用 php 的 str_replace 函数将其与括号一起删除。

【讨论】:

  • 如果它不是静态的,那么 jQuery1111014795648865074196_1507974360762 的长度在 php 的响应 try substring 函数中必须相同。否则,最后一个选项是使用 strpos 并找到第一个左括号的位置并使用子字符串函数删除字符串之前的内容
【解决方案2】:

尝试以下方法:

$Data = 'jQuery1111014795648865074196_1507974360762({"type":"my","start":1,"end":20,"total":20})';
$Data = preg_replace("/^[\w]+[(]|[)]$/", '', $Data);
$D2 = json_decode($Data);
echo $Result_Count = $D2->total;

这使用regexjson 字符串中删除前缀和括号。

【讨论】:

  • @HiteshAghara 不,这不会中断 json 字符串。因为它将从字符串的开头开始,在( 停止,删除它,然后删除最后一个)。如果中间有任何这些字符,则不会更改它们。
猜你喜欢
  • 1970-01-01
  • 2013-01-19
  • 2012-04-02
  • 2019-12-20
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
相关资源
最近更新 更多