Проблемы с запросом JSONP - PullRequest
0 голосов
/ 25 июня 2010

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

Вот код 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"})

Есть идеи, какая у меня серьезная ошибка?

Ответы [ 2 ]

0 голосов
/ 30 июня 2010

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

0 голосов
/ 29 июня 2010

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

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

Срабатывает ли оповещение?

...