JSONP запрос к странице PHP не работает (междоменный) - PullRequest
1 голос
/ 05 мая 2011

Это моя страница PHP (по другому URL) ...

<?php
header('Content-Type: application/json');
?>
stat({"online":1});

И это мой jQuery:

$(document).ready(function(){

    var url = 'http://blah.com/jsontest.php?callback=stat';

    $.getJSON(url, function(data) {
        if (data.online !== undefined) {
            console.log('yay');
        }
    }).error(function() {
        console.log('no');
    });

});

По какой-то причине всегда ведется лог 'нетто есть он выполняет функцию ошибки.

Использование jQuery 1.5.2 какие-либо идеи?

Ответы [ 2 ]

4 голосов
/ 05 мая 2011

Во-первых, JSON-P - это не JSON.Тип контента должен быть application/javascript.Некоторые браузеры могут отклонять JSON-P, служивший JSON за небезопасность.

Во-вторых, getJSON ожидает, что URL, который вы запрашиваете, имеет ? для имени метода обратного вызова (и вам нужно получить свой PHPобратить внимание на $_GET['callback']).

В-третьих, если исправление не работает, посмотрите на вкладку «Сеть» в Firebug / Chrome debugger / Dragonfly / и т. д. и посмотрите, какие данные фактически передаются по проводам.

0 голосов
/ 28 июля 2011

Есть некоторые махинации с включением функции обратного вызова.Очевидно, вы не возвращаете объект, а функцию, которая была отправлена ​​в исходном клиентском запросе.Я только смутно понимаю, что все это значит, однако у меня есть некоторый код для этого, который на самом деле работает:

Сторона сервера:

<?php
$headers = get_headers($toGetUrl,1);
$return["pop_singer"] = "Britney Spears";
// Right here is where the json object gets wrapped in a function that was submitted under the name "callback"
echo $_GET['callback']."(".json_encode($return).")";
?>

Сторона клиента (это то же самое, что$ .getJSON ()):

$.ajax({
type: "GET",
url: serverUrl,
dataType: 'jsonp',
error: function(request, status) {
    // Do some error stuff
},
success: function(data, textStatus, jqXHR) {
    var property = data.pop_singer;   // equals "Britney Spears"
    // Do some successful stuff
}

});

...