Обновление IV / Текущий статус: теперь я подтвердил еще один вопрос, что кодировка символа файла прекрасна, а не причина проблемы. Я также тестировал другой сервер, и ошибка по-прежнему сохраняется. Однако он работает с локальным хостом. Итак, чтобы подвести итог: вызов JSONP работает в направлении localhost, но при работе с внешними доменами ответ с сервера пуст (нет кода заголовка / нет ответа HTTP). При копировании запрошенного URL-адреса и его вставке непосредственно в браузере вывод корректен с правильным форматированием (utf-8 / json).
Сценарий: http://jsfiddle.net/5SJvp/1/
Обновление III: теперь я могу заставить его работать на локальном хосте. Однако, используя тот же самый код (как клиент, так и сервер) для моего производственного домена, он все еще не работает. Ответ с сервера «пустой» означает, что он не возвращает код состояния http.
Обновление II: после некоторой дополнительной отладки я заметил, что ответ не содержит код состояния http. Возможно, это причина моей проблемы? Я предполагаю, что это означает, что есть некоторая неправильная сторона сервера, но я не могу для жизни видеть, где.
Обновление I: Снайпер из jQuery, где запрос, кажется, останавливается.
// Do send the request // This may raise an exception which is actually // handled in jQuery.ajax (so no try/catch here) xhr.send( ( s.hasContent && s.data ) || null );
Парамс (из Firebug)
_ 1356655864905 callback jQuery18308375673194150332_1356655863817 p 0522 pl 12 s false secret ############################## u request12341299
Запрос (от Firebug)
Accept text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01 Accept-Encoding gzip, deflate Accept-Language nb-no,nb;q=0.9,no-no;q=0.8,no;q=0.6,nn-no;q=0.5,nn;q=0.4,en-us;q=0.3,en;q=0.1 Connection keep-alive Host localhost:8888 Referer http://localhost:8888/popup.html User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0 X-Requested-With XMLHttpRequest
Оригинальный вопрос:
Я борюсь с тем, что кажется общей проблемой, но мне еще предстоит найти решение. Я пытаюсь выполнить очень простой вызов jsonp с помощью jQuery. Проблема в том, что либо а) ничего не происходит, либо б), ответ с сервера пуст.
Я пробовал несколько разных подходов, используя метод $ .ajax и метод $ .getJSON. Оба продукта имеют одинаковый дефектный результат. Использование кода ниже ничего не происходит: с помощью отладчика Chrome я вижу, что он просто прекращает выполнение halffway через метод. Однако, используя Wireshark, я вижу, что клиент выполняет трехстороннее рукопожатие и, таким образом, готовит отправку данных, он просто не может этого сделать.
Если я удалю обратный вызов =? он выполняется, однако ответ отклонен (или, по крайней мере, я так думаю, так как я могу видеть только ответ, отмеченный красной линией в Firebug).
$.ajax({ url: "http://mydomain.com/asd.php", //"http://localhost:8888/index.php", dataType: 'jsonp', type: 'GET', data: {p:p, u:u, s:symbols, pl:pl, secret:secret}, contentType: "application/json; charset=utf-8", async: false, success: function(data){ console.log("What " + data.test); }, error: function(data){ console.log("failed for some reason"); } });
Код сервера ($ callback = $ _GET ["callback"]
<?php header('content-type: application/json; charset=utf-8'); . . . $data = array ( "message" => $message, "status" => $statuscode, "length" => strlen($message) ); echo $callback . '('.json_encode($data) .')'; exit; ?>
Вот ответ сервера с введенным вручную вводом.
funcName({"message":"!0b7(cb6Gv40","status":"OK","length":12})