jsonp -> json_decode () - PullRequest
       15

jsonp -> json_decode ()

1 голос
/ 20 января 2010

по какой-то причине я не могу получить информацию из возвращенной строки 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?

?>

это мои результаты

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

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

json_decode set AVcontent

Не пусто

Я должен увидеть эхо $ AVDecode

Ответы [ 3 ]

6 голосов
/ 20 января 2010

Предложение по отладке:

Проверьте вывод json_last_error () .Это должно дать вам точную причину, почему это не работает.Доступно только в PHP 5.3.0.

Причина:

JSONP не совпадает с JSON .Он содержит дополнительные данные, которые разбивают json_decode ().

Решение:

Снимите дополнительные скобки с помощью substr($AVDecode, 1, strlen($AVDecode)-2)

0 голосов
/ 20 января 2010

Ваш пример URL возвращает

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

JSONP не является допустимым JSON, он будет заключен в ваш обратный вызов, как

callbackname(JSONIsInHere)

Итак, вам нужно подстроку $ AVcontent от первого вхождения (до последнего вхождения), чтобы получить параметр обратного вызова, который является допустимым JSON и может быть закодирован с помощью json_decode.

0 голосов
/ 20 января 2010

вы не можете повторить объект или массив.пожалуйста, сообщите нам, что печатает эта строка:

print_r(json_decode($AVcontent));

поместите ее сразу после $AVDecode = json_decode($AVcontent);

...