Tôi đang gặp sự cố khi phân tích cú pháp yêu cầu 'jsonp' với chức năng json_decode
của php.PHP: Xử lý đầu ra 'JSONP' so với 'JSON' và phân tích cú pháp của nó?
Câu hỏi của tôi là
a. Việc sử dụng chức năng gọi lại trong 'jsonp' là gì, tôi có nên tắt chuyến đi hay tôi giả sử sử dụng chức năng này theo cách nào đó. ?
b. Làm cách nào để khắc phục lỗi cú pháp nhận được ở định dạng 'jsonp'?
Dưới đây tôi đã đưa ra mã và phản hồi mà tôi nhận được.
1. Tôi yêu cầu một url mẫu với curl PHP
$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. Sau đó, tôi cố gắng json_decode đầu ra nhận được, mà ném lỗi không 4 ý nghĩa JSON_SYNTAX_ERROR, lý do tôi đoán là vì tên của loại chuỗi trong jsonp không được trích dẫn. ví dụ. Categories
, Name
, Position
, vv
$json_feed = json_decode($feed);
$error = json_last_error();
echo $error; // Throws error no. 4
3. RAW 'jsonp' đầu ra từ url.
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"
}
}
]
});
Kiểm tra câu trả lời này: http://stackoverflow.com/a/5081588/1788516 – Perry
@ Perry, cảm ơn tôi đã thấy câu trả lời đó, nhưng có lý do nào khiến máy chủ phản hồi gửi chức năng gọi lại không. Đó là chức năng gọi lại phải phục vụ một số mục đích phải không? –