по какой-то причине я не могу получить информацию из возвращаемой строки 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/ обратного вызова =
({"text": "komputilo: computer"})
json_decode set AVcontent
Не пусто
Я должен видеть echo $ AVDecode
Предложение отладки:
Проверьте вывод json_last_error () . Это должно дать вам точную причину, почему она не работает. Тем не менее, доступно только для PHP 5.3.0.
Причина:
JSONP не идентичен JSON . Он содержит дополнительные данные, которые разбивают json_decode ().
Решение:
Удалите дополнительные скобки, используя substr($AVDecode, 1, strlen($AVDecode)-2)
вы не можете отразить объект или массив. сообщите нам, что распечатывает эта строка:
print_r(json_decode($AVcontent));
поместите его сразу после $AVDecode = json_decode($AVcontent);
Ваш пример URL возвращается
?({"text":"<b>peti</b>: ask, ask for, beg, bid, request"})
JSONP недействителен JSON, он перенесет его в ваш запрошенный ответ, например
callbackname(JSONIsInHere)
Поэтому вам нужно подстроить $ AVcontent от первого появления (до последнего появления), чтобы вы получили параметр обратного вызова, который является допустимым JSON и может быть закодирован с помощью json_decode.