2

何らかの理由で、返された jsonp 文字列から情報を取得できません。

<?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 セット AVcontent

空ではない

echo $AVDecode が表示されるはずです

4

3 に答える 3

6

デバッグの提案:

json_last_error()の出力を確認してください。機能しない正確な理由を示す必要があります。ただし、PHP 5.3.0 からのみ利用可能です。

理由:

JSONPはJSONと同じではありません。json_decode() を壊す余分なデータが含まれています。

解決:

を使用して余分なブラケットを削除しますsubstr($AVDecode, 1, strlen($AVDecode)-2)

于 2010-01-20T12:37:15.867 に答える
0

サンプルURLは次のようになります

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

JSONPは有効なJSONではありません。提供されたコールバックに次のようにラップされます。

callbackname(JSONIsInHere)

したがって、(の最後の出現まで)の最初の出現から$ AVcontentをサブストリング化して、有効なJSONであり、json_decodeでエンコードできるコールバックパラメーターを取得する必要があります。

于 2010-01-20T12:56:33.120 に答える
0

オブジェクトまたは配列をエコーすることはできません。この行が何を出力するか教えてください:

print_r(json_decode($AVcontent));

の直後に置く $AVDecode = json_decode($AVcontent);

于 2010-01-20T12:40:20.553 に答える