Как проверить URL в jQuery - PullRequest
2 голосов
/ 27 июня 2009

У меня есть URL, который я хочу открыть в FancyBox (или в любом другом всплывающем окне). Я не знаю заранее, хорош ли URL, поэтому я хочу проверить его. Если не верно - я не буду прикреплять плагин fancyBox к этому конкретному URL, это будет просто обычная ссылка. Как проверить URL-адрес перед подключением к нему плагина? Попытался сделать что-то вроде:

$("a.overlay").each(function() {
    var xhr = $.get(this.href, function(data, status) {
        // never executed in case of a failed request
    });
    if (xhr.status && xhr.status === 404)) {
        // not good, do nothing
    } else {
        // can attach plugin here
    }
});

Проблема в том, что xhr не всегда будет определяться, потому что JS не ожидает завершения запроса. Точно так же я не могу использовать функцию обратного вызова, потому что она не выполняется в случае сбоя запроса (я вижу это в Firebug, но это не очень полезно).

Спасибо и хороших выходных всем.

Ответы [ 4 ]

7 голосов
/ 27 июня 2009

Вы можете сделать это так, хотя я хотел бы спросить, насколько разумно сделать запрос для каждой ссылки ....

$("a.overlay").each(function() {
    var $a = $(this);
    $.ajax({
        type: 'GET',
        url: this.href,
        success: function() {
            // attach plugin here
        },
        error: function() {
            // not good, log it
        }            
    });
});

Если вы не собираетесь ничего делать с содержимым страницы, вы можете переключить 'GET' с помощью 'HEAD', чтобы получить только заголовки запрашиваемой страницы, что будет быстрее и даст вам знать, что вы хотите .

1 голос
/ 27 июня 2009

Паоло дал вам ответ на то, что вы просили - но мне кажется расточительным каждый клиент проверять качество ссылки каждый раз. Мало того, что это тратит пропускную способность цели, это тратит время клиента.

Это то, что можно и нужно сделать один раз (возможно, ежедневно) на стороне сервера. Оттуда вы должны сгенерировать соответствующий html / js. С инженерной точки зрения мне кажется, что это более мудрый подход.

Я не знаю, какой серверный фреймворк вы используете, если таковой имеется, но у любого из тех, с которыми я работал, встроены довольно простые http-клиенты и средства chronjob / запланированных заданий.

в качестве альтернативы вы можете создать страницу таким образом, чтобы проверка выполнялась по первому запросу дня, а результаты кэшировались на диске (или в памяти) для будущих запросов в течение дня. Эта первая загрузка может быть немного медленной.

0 голосов
/ 16 апреля 2011

Я знаю, что это довольно старая версия, но я все равно добавляю ее на тот случай, если кто-то захочет найти другие варианты. Взгляните на этот плагин: http://www.webmonkey.com/2010/07/beautify-broken-links-with-catch404/

Описание от webmonkey:

Но теперь у нас есть Catch404 от Addy Osmani, JQuery плагин, который обрабатывает неработающие ссылки со стилем. развертывание Catch404 на вашем сайте, а не видя страницу с битой ссылкой, пользователь представлен с Ajax модальное окно (также называемое прыжком или лайтбокс) информируя их страницы нет. Окна также предлагает несколько альтернативных направлений они могут захотеть проверить.

0 голосов
/ 23 февраля 2011

Глядя на ваш вопрос The problem is, xhr will not always be defined because JS doesn't wait for the request to complete., можно заставить звонок ждать ответа, создав

$().ajax({args});

Позвонить с async: false.

Проверьте аргумент async на http://api.jquery.com/jQuery.ajax/ для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...