jQuery jsonp: пропустить фактическое выполнение jsonp?

Я пытаюсь использовать jQuery, чтобы проверить, заблокирован ли/разблокирован ли определенный веб-сайт/порт компьютером пользователя. Я могу заставить его работать правильно, с небольшим раздражением, что он выдает ошибки, например. "Uncaught SyntaxError: неожиданный токен ‹"

Можно ли просто позволить jQuery выполнить запрос на получение на странице, чтобы увидеть код возврата, но не вводить его на веб-сайт как javascript? Если нет, будут ли когда-нибудь побочные эффекты от этого кода?

Примечание. Я не владею проверяемыми сайтами, поэтому я не могу заставить их реализовать jsonp.

var checkPorts = function() {
    var url = "__redacted__" ;
    $.ajax({
        url: url,
        type: "get",
        cache: false,
        dataType: 'jsonp', // it is for supporting crossdomain
        crossDomain : true,
        asynchronous : false,
        timeout : 5000, // set a timeout in milliseconds
        complete : function(xhr, responseText, thrownError) {
            if(xhr.status == "200") {
                //nothing
            }
            else {
                $("#ports-warning").slideDown();
            }
        }
    });
};

person Glen Takahashi    schedule 20.02.2013    source источник
comment
Вы не можете сделать это с JSONP, так как это не обычный запрос Ajax. JSONP просто вставляет тег script, и этот процесс заставляет браузер загружать все, на что указывает URL-адрес (и оценивать это как JavaScript). Но получение синтаксической ошибки означает, что вызов был успешным... хотя это не кажется очень надежным методом.   -  person Felix Kling    schedule 21.02.2013
comment
Но как полная функция узнает, правильно ли загружен скрипт/страница? Будет ли способ внедрить веб-страницу в виде сценария не типа javascript, а в виде текста или чего-то, что на самом деле не выполняло страницу?   -  person Glen Takahashi    schedule 21.02.2013
comment
Я немного поиграл с элементом script, но похоже, что всякий раз, когда вы устанавливаете для свойства type что-то, что не запускает выполнение скрипта (например, text/plain), содержимое, на которое указывает src, даже не загружается. Так что нет, похоже, нет способа, по крайней мере, с script. Возможно, вы сможете использовать элемент iframe и прослушать его событие load. w3.org/ TR/2011/WD-html5-20110525/. (именно так работает обратный вызов jQuery complete, только он вставляет элемент script).   -  person Felix Kling    schedule 21.02.2013


Ответы (1)


Нет свойства asynchronous для $.ajax, вы имели в виду async? Посмотрите в отладчике браузера и посмотрите, как выполняется запрос, это должен быть XHR, чтобы ваш подход имел какие-либо шансы на работу. Также, если вы используете jQuery 1.9.x, попробуйте плагин jQuery Migrate.

person Dave Methvin    schedule 21.02.2013