jQuery getJSON на внешнюю страницу PHP - PullRequest
9 голосов
/ 26 апреля 2009

Я пытался сделать запрос AJAX на внешний сервер. До сих пор я узнал, что для этого мне нужно использовать getJSON по соображениям безопасности?

Теперь я не могу сделать простой вызов на внешнюю страницу. Я пытался максимально упростить его, но он все еще не работает. У меня есть 2 файла, test.html & test.php

my test.html делает такой вызов на localhost для тестирования:

    $.getJSON("http://localhost/OutVoice/services/test.php", function(json){
    alert("JSON Data: " + json);
});

и я хочу, чтобы мой test.php возвращал простой 'test':

$results = "test";
echo json_encode($results);

Я, вероятно, совершаю невероятную ошибку новичка, но, похоже, не могу понять это. Кроме того, если это работает, как я могу отправить данные на мою страницу test.php, как вы бы сделали, как test.php? Id = 15?


Страница test.html вызывает страницу test.php на локальном хосте в том же каталоге Я не получаю никаких ошибок, просто без предупреждения ..

Ответы [ 3 ]

16 голосов
/ 26 апреля 2009

Это может быть тем, что вы не получили обратный вызов в test.php. Кроме того, json_encode принимает только массив:

$results = array("key" => "value");
echo $_GET['callback'] . '(' . json_encode($results) . ')';
// the callback stuff is only needed if you're requesting from different domains

jQuery автоматически переключается на JSONP (т. Е. Используя теги сценария вместо XMLHttpRequest), когда вы используете http://. Если у вас есть test.html и test.php в одном домене, попробуйте использовать относительные пути (и никаких обратных вызовов).

15 голосов
/ 19 ноября 2010

Будьте осторожны с ответом Моффа. У него распространенная уязвимость XSS: http://www.metaltoad.com/blog/using-jsonp-safely

2 голосов
/ 07 апреля 2012

Самое простое решение состоит в том, чтобы добавить приведенный ниже код перед любым выводом в файл test.php, тогда у вас будет больше гибкости в том, какие методы вы используете, должен работать стандартный вызов ajax.

header ('Access-Control-Allow-Origin: *');

Однако используйте функцию обратного вызова json, когда вы получаете данные с сервера, находящегося вне вашего контроля.

...