2010-01-20 54 views
1

出於某種原因,我不能得到信息返回的JSONP字符串,JSONP - > json_decode()

<?php 
// Created by Talisman 01/2010 ★✩ 

$vorto = $_GET['vorto']; // Get the Word from Outer Space and Search for it! 

if (isset($vorto)) 
{ 
echo $vorto; 
} else { 
    $Help = "No Vorto -> add ?vorto=TheWordYouWant to the end of this website"; 
    echo $Help; 
} 



// Now Lets Search Alex's Vortaro, It uses jsonp 
// ex. http://vortaro.us.to/ajax/epo/eng/petas/?callback=? 
// Future Feature inproved language functinality 

$AVurl1 = "http://vortaro.us.to/ajax/epo/eng/"; 
$AVurl2 = "/?callback="; 
$AVfinalurl= $AVurl1 . $vorto . $AVurl2; 

echo $AVfinalurl . ' </br> '; // DEBUG CODE 

$AVcontent = file_get_contents($AVfinalurl) ; 
echo $AVcontent . ' </br> '; // DEBUG CODE 

//★✩爲什麼這下一行不行?

$AVDecode = json_decode($AVcontent); 


// /* 
    if(isset($AVcontent)) {   // DEBUG CODE 
    echo "json_decode set AVcontent" . ' </br> '; 
    } else { 
    echo "something fishy here" . ' </br> '; 
    } 

if (empty($AVcontent)){ 
    echo "EMPTY EMPTY" . ' </br> '; 
    } else { 
    echo "Not Empty". ' </br> '; 
    } 

echo $AVDecode . ' </br> '; 
// */ 

// Why can't I echo or access information with $AVDecode? Is it something with 
// jsonp? 

?> 

這是我的結果

komputilojhttp://vortaro.us.to/ajax/epo/eng/komputiloj/?callback=

({"text":"komputilo: computer"})

json_decode set AVcontent

Not Empty

我應該看到回聲$ AVDecode

回答

6

調試建議:

檢查的json_last_error()輸出。它應該給你一個確切的理由,爲什麼它不起作用。不過,僅限於PHP 5.3.0。

原因是:

JSONP不與JSON相同。它包含打破json_decode()的額外數據。

解決方案:

使用substr($AVDecode, 1, strlen($AVDecode)-2)

+0

我得到了這個致命錯誤:調用未定義的函數json_last_error()在/Users/briancarpenter/Sites/Vortoj/preniVortoj.php在線53與回聲json_last_error() – Klanestro 2010-01-20 12:40:47

+0

哦,它的> 5.3.0只。您可能有一個較舊的PHP版本。等一下,我會運行它。你能不能指出你從數據源中得到什麼? – 2010-01-20 12:48:45

+1

解碼:({「text」:「peti:ask,ask for,beg,bid,request」})適用於我*如果刪除了括號*'()'。 json_decode無法處理jsonp。您需要手動刪除括號,或者(更好)使您的數據源輸出適當的json。 – 2010-01-20 12:51:19

0

你不能回聲一個對象或一個陣列刪除多餘的括號。 請告訴我們這行打印出來:它之後

print_r(json_decode($AVcontent)); 

地方權$AVDecode = json_decode($AVcontent);

+0

絕對沒有任何反應,沒有變化 print_r(json_decode($ AVcontent)); 什麼都不做, – Klanestro 2010-01-20 12:46:12

+0

也許這就是({「text」:「komputilo:computer」})一個無效的json字符串http://www.jsonlint.com/ – antpaw 2010-01-20 12:50:37

+0

沒有komputilo是$ vorto = $ _GET ['vorto']該頁面開始。 – Klanestro 2010-01-20 13:02:13

0

你的榜樣URL返回

?({"text":"<b>peti</b>: ask, ask for, beg, bid, request"}) 

JSONP是不是有效的JSON,它將自動換到你提供回調像

callbackname(JSONIsInHere) 

所以你ne編輯爲從第一次出現(到最後一次出現)的子串$ AVcontent,以便您將獲得有效JSON的回調參數,並且可以使用json_decode進行編碼。