【发布时间】:2013-07-10 21:23:42
【问题描述】:
我在使用 php 的 json_decode 函数解析“jsonp”请求时遇到问题。
我的问题是
一个。 'jsonp' 中的回调函数有什么用,我应该只是将其关闭,还是我想以某种方式使用它。 ?
b. 如何纠正以 'jsonp' 格式收到的语法错误?
下面我给出了代码和我得到的响应。
1. 我请求一个带有 PHP curl 的示例 url
$url = 'https://ssl.domain.com/data/4564/d.jsonp';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
$feed = curl_exec($ch);
curl_close($ch);
echo $feed = gzdecode($feed); // Success its displays the jsonp feed
2.然后我尝试对接收到的输出进行json_decode,这会抛出错误4,意思是JSON_SYNTAX_ERROR,我猜的原因是因为jsonp中的字符串类型的名称没有被引用。例如Categories、Name、Position等
$json_feed = json_decode($feed);
$error = json_last_error();
echo $error; // Throws error no. 4
3. 来自 url 的 RAW 'jsonp' 输出。
domain_jsonp_callback({
Categories:[
{
Name:"Artifacts",
Position:14,
Count:70,
ImageUrls:{
i100:"//s3-eu-west-1.amazonaws.com/s.domain.com/1.png",
i120:"//s3-eu-west-1.amazonaws.com/s.domain.com/2.png",
i140:"//s3-eu-west-1.amazonaws.com/s.domain.com/3.png",
i180:"//s3-eu-west-1.amazonaws.com/s.domain.com/4.png",
i220:"//s3-eu-west-1.amazonaws.com/s.domain.com/5.png",
i280:"//s3-eu-west-1.amazonaws.com/s.domain.com/6.png"
}
}
]
});
【问题讨论】:
-
@Perry,谢谢我确实看到了这个答案,但是响应服务器发送回调函数有什么原因吗?那个回调函数一定是有目的的吧?