PHP, jQuery Ajax и json возвращаются через кросс-домен - PullRequest
2 голосов
/ 20 марта 2012

У меня есть страница с PHP-кодом на одном сервере, которая возвращает результат json.php-файл называется: getInfoData.php, и результат будет таким, как показано ниже.

  echo json_encode($v);

Нет, я могу использовать $ .getJSON (??), чтобы прочитать json и запустить все это так же хорошо, но ямне нужно, чтобы страница php находилась на другом сервере, нежели страница js, вызывающая ее.

Но потом я получаю, когда получаю междоменную проблему.

Поэтому я изменил код наиспользуйте следующее (jsonp):

  $.ajax({
    url: 'FILE_LOCATION_ON_ANOTHER_SERVER',
    type: 'GET',
    crossDomain: true,
    dataType: 'jsonp',
    success: function() { console.log("Success"); },
    error: function() {console.log('Failed!'); }
});

, но я ничего не вижу, я просто получаю следующее с моей консоли:

  http://www.THEURL.com/FOLDER/FILENAME.php?callback=jQuery171013088115444406867_1332256223342&_=1332256223343

и сообщение о сбое!.

Что я делаю не так и как, если вообще можно это исправить?

Спасибо

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

JSONP на самом деле не является JSON.Это немного "взломать".JSONP на самом деле является файлом JavaScript, который загружается и запускается.

На вашей странице PHP вам должен быть передан параметр callback.Вам нужно «обернуть» в него свой JSON.Это должно выглядеть так:

func({json: data})

Итак, ваш PHP должен выглядеть так:

echo $_GET['callback'] . '(' . json_encode($v) . ')';
2 голосов
/ 20 марта 2012

Я обычно использую это, но, может быть, есть лучший способ

<?php header('content-type: application/javascript; charset=utf-8');

$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9);

echo htmlspecialchars($_GET['callback']) . '('.json_encode($data).')';

поскольку я видел, что вы указали параметр обратного вызова, все должно быть в порядке

...