2010-06-25 2 views
0

Хорошо, я не уверен на 100%, что я делаю неправильно здесь. Может быть, мне просто нужна вторая пара глаз, чтобы выявить ошибку моих путей. Я отправляю запрос JSONP, используя jQuery из одного домена (https://customerhub.net) в PHP-скрипт в моем домене (https://dankennedy.com) и получая ответ от этого скрипта. Я знаю, что запрос работает, потому что в целях тестирования я печатаю все свои данные в файл перед отправкой ответа, и данные проходят. Однако по какой-либо причине функция обратного вызова не работает.Смуты с запросом JSONP

Вот код JQuery:

jQuery('#form1').validationEngine({ 
failure: false, 
success: function(){ 
    var url = 'https://dankennedy.com/test2.php?jsoncallback=?'; 
    jQuery.getJSON(url, jQuery('#form1').serialize(), function(){ 
    alert('I ran... for once'); 
    }); 

    return false; 
} 
}); 

Вот PHP код:

$callback = $_REQUEST['jsoncallback']; 

$myFile = "info.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 

$data = ''; 
foreach($_REQUEST as $key => $value) 
$data .= ", `".$key."` = \"".$value."\""; 

$stringData = 'Array: ' . substr($data, 1); 

fwrite($fh, $stringData); 

$response = array('msg' => 'SUCCESS'); 

$fullResponse = $callback.'('.json_encode($response).')'; 

fwrite($fh, "\n".$fullResponse); 

fclose($fh); 

header('Content-type: text/plain'); 
echo $fullResponse; 

В конце концов я буду делать больше с кодом и есть мой PHP доступ к скриптам мою базу данных и отправить обратно некоторые значимые данных, и моя функция jQuery выполняет некоторую обработку этих данных. Пока я просто печатаю материал и начинаю с малого, чтобы убедиться, что обмен информацией над JSONP работает.

Все выглядит хорошо. Я также следую коду в Firebug и вижу, как обрабатывается код. Запрос выполняется, но оператор предупреждения внутри не работает.

Это то, что файл записывается в распечатке:

Array 5: `jsoncallback` = "jsonp1277479829087", `id` = "", `type` = "blog", `task` = "add", `title` = "Brace Ford", `date` = "June 25, 2010 11:30 AM", `author` = "", `teaser` = "Teaser", `body` = "Body", `download` = "", `comments` = "", `__utma` = "119149980.718135870.1277328038.1277328038.1277386321.2", `__utmz` = "119149980.1277328038.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)", `SESS6c0bc6ae4aee7e8c564bc45425742fc0` = "tpc7lmtv551kg1vpuvo2c9efi1", `__utmv` = "119149980.authenticated user,s1a", `mifge` = "DKFrontPage", `__utmc` = "119149980" 
jsonp1277479829087({"msg":"SUCCESS"}) 

Любой идее, что мой тяжкий ошибка есть?

+0

Возможно, вам удастся использовать 'jQuery.ajax()' и построить вызов со всеми зарегистрированными обратными вызовами и посмотреть, какие вызовы вызываются. (Другими словами, попробуйте его как обычный запрос ajax без обратного вызова JSONP.) – Charles

+0

Неплохая идея, пытающаяся использовать разные обратные вызовы. Тем не менее, мне все же приходится использовать обратные вызовы JSONP, потому что jQuery.ajax() с обычными обратными вызовами не работает в разных доменах. Запрошенная страница находится на странице gkic.customerhub.net, а моя страница php находится на dankennedy.com. По-прежнему можно попробовать разные обратные вызовы. Спасибо за предложение. –

ответ

0

Я понял, в чем проблема. По какой-то причине обратный вызов, который я должен был использовать, был «JSONcallback», а не «jsoncallback». Учитывая идею Чарльза и предложение, которое я нашел на другом форуме о капитализации «JSON», я решил, что попробую. Работал как шарм. Спасибо за помощь ребята!

0

Вы не сможете отладить код функции успеха getJSON в FireBug, но это ожидается. Вместо этого вы должны видеть (если вы посмотрите на источник в FireBug), это тег скрипта, введенный в html-head. Правильно ли это происходит? И попытаться сделать это, чтобы увидеть, если ответ получает через - возвращает строку, например, «оповещения („тест“)» с сервера:

$fullResponse = 'alert("test")'; 
echo $fullResponse; 

ли предупреждения пожара?

+0

Да, я не думал, что Firebug обнаружил бы много в стеке, но, по крайней мере, позвольте мне проследить ход кода и сообщить мне, что он попытался войти в функцию «on success» или нет. Мог попробовать. Будет ли отображаться только «предупреждение (« тест ») из сценария php на запрашивающую страницу? Мне не нужно кодировать его в формате JSON, например .. $ callback. '("Alert (' test ');")'; Я мог бы попробовать. Спасибо за предложение! –

+0

Отлично, вы решили это, поздравляю! Просто ответьте на ваши комментарии.Причина предупреждения («тест»); должен срабатывать, так это то, что на самом деле происходит то, что тег