Здравствуйте! Тега JSONP не было, поэтому поставил просто JSON.
Проблема такая:
Есть скрипт, который отправляет запрос моему серверу на php по протоколу JSONP:
var CallbackRegistry = {};
function scriptRequest(url, onSuccess, onError) {
var scriptOk = false;
var callbackName = 'cb' + String(Math.random()).slice(-6);
url += ~url.indexOf('?') ? '&' : '?';
url += 'callback=CallbackRegistry.' + callbackName;
CallbackRegistry[callbackName] = function(data) {
scriptOk = true;
delete CallbackRegistry[callbackName];
onSuccess(data);
};
function checkCallback() {
if (scriptOk) return;
delete CallbackRegistry[callbackName];
onError(url);
}
var script = document.createElement('script');
script.onreadystatechange = function() {
if (this.readyState == 'complete' || this.readyState == 'loaded') {
this.onreadystatechange = null;
setTimeout(checkCallback, 0);
}
}
script.onload = script.onerror = checkCallback;
script.src = url;
document.body.appendChild(script);
}
function ok(data) {
alert( "Загружен время " + data.time );
}
function fail(url) {
alert( 'Ошибка при запросе ' + url );
}
scriptRequest("http://comet/php.php", ok, fail);
Вот сам сценарий php:
<?php
$d = new DateTime();
$response = json_encode(array(
time => $d->format("r")
));
print $_GET["callback"] . "(" . $response . ");";
?>
Если открыть js сценарий в яндексе, то alert появится на мнговение и сразу же исчезнет. Хотя в хроме все окей.
Мои предположения:
1. XMLHttpRequest блокирует основной поток (если он синхронен, не знаю как он работает при загрузки скриптов), то же самое делает и alert. Возможно возникает конфликт из-за того, что сначала alert замораживает основной поток, потом замораживает поток и xmlHttpRequest.
Как исправить? Что вызвало проблему?
Заранее спасибо всем за ответы!