2013-02-20 3 views
0

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

Можно ли просто позволить 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(); 
      } 
     } 
    }); 
}; 
+0

Вы не можете сделать это с помощью JSONP, так как это не обычный запрос Ajax. JSONP просто вставляет тег 'script', и этот процесс заставляет браузер загружать все, на что указывает URL (и оценивать его как JavaScript). Но получение синтаксической ошибки означает, что вызов был успешным ... хотя, похоже, это не очень надежный метод. –

+0

Но как «полная» функция знает, правильно ли загружен сценарий/страница? Будет ли способ внедрить веб-страницу в качестве скрипта, а не типа javascript, но как текст типа или что-то, что фактически не выполняло страницу? –

+0

Я играл немного с элементом 'script', но похоже, что когда вы устанавливаете свойство' type' для чего-то, что не запускает выполнение скрипта (например, 'text/plain'), тогда содержимое, на которое указывает' src' даже не загружен. Так что нет, похоже, нет способа, с «скриптом», по крайней мере. Возможно, вы сможете использовать элемент 'iframe' и слушать его событие' load'. http://www.w3.org/TR/2011/WD-html5-20110525/the-iframe-element.html#the-iframe-element. (так работает «полный» обратный вызов jQuery, только он вставляет элемент 'script'). –

ответ

0

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