2013-09-23 4 views
-1

Я пытаюсь поставить статический jsonp-файл (jsonp-test.php) на сервере, но я не могу его прочитать. Это то, что у меня есть:Как обслуживать статический файл JSONP с сервера?

mycallback[ 
    {"key":"1","val":"test1"}, 
    {"key":"2","val":"test2"} 
] 

И это, как я пытаюсь читать:

var url = "http://www.remote-server/jsonp-test.php?callback=mycallback"; 
$.getJSON(url, function(data) { 
    alert(data.toSource()); 
}); 

Что я делаю неправильно?

+0

jsonp-test.php не звучит как статический файл. Является ли 'mycallback' жестко закодированным где-то, или скрипт использует параметр запроса обратного вызова, чтобы установить это? Будет ли это оставаться PHP-скриптом или вы планируете преобразовать его в статический файл? –

+0

@MichaelGeary 'mycallback' жестко закодирован внутри jsonp-test.php. В настоящее время динамическая информация отсутствует в jsonp-test.php. – user1448031

ответ

0

Итак, несколько вещей ... Когда вы говорите «Я не могу его прочитать», можете ли вы проверить, действительно ли вы запрашиваете JSONP с правильного адреса? Например, вы можете открыть URL-адрес

http://www.remote-server/jsonp-test.php?callback=mycallback 

на вкладке браузера и см. JSONP. Если это так, то вторая проблема, о которой я думаю, имеет формат вашего JSONP, неверна. mycallback на самом деле имя функции, которая вызывается, так что содержание вашего JSON должен быть заключен в круглые скобки с полу, как показано ниже

mycallback(
    [ 
    {"key":"1","val":"test1"}, 
    {"key":"2","val":"test2"} 
    ] 
); 
+0

Да Я могу открыть URL-адрес в браузере. Я также внесли изменения в JSONP, как вы предлагали, но я все еще не могу прочитать его из jQuery. – user1448031

0

Во-первых, как описано Bradley, исправить синтаксис файла JSONP - ему нужны эти круглые скобки. Это потому, что файл должен быть действительным кодом JavaScript. JSONP - это просто соглашение об использовании вызова функции JavaScript для загрузки данных JSON из файла сценария.

Если файл останется неподвижным - в частности, если имя функции mycallback жестко закодировано - тогда вы, вероятно, должны просто рассматривать его как файл сценария, который вызывает глобальную функцию, потому что на самом деле это так. Определить глобальную функцию с именем mycallback и использовать $.getScript() загрузить статический JSONP/JavaScript файла:

window.mycallback = function(data) { 
    alert(data.toSource()); 
}; 

$.getScript('http://www.remote-server/jsonp-test.php'); 

Обратите внимание, что вам не понадобится ?callback=mycallback для статического файла либо.

Смежные вопросы