2013-03-26 2 views
0

У меня есть пользовательский скрипт, который вызывает вызов ajax через GM_xmlhttprequest для загрузки простой страницы с некоторым текстом и ссылками в div с именем «debug». это работает очень хорошо. теперь я хочу, чтобы каждая ссылка в запрошенном документе запрашивалась через gm_xmlhttprequest. Я не знаю, почему моя функция не работаетСсылки с запроса ajax не запрашиваются через ajax

$('.ajax, .ajaxn').click(function(event) { 
event.preventDefault(); 
var href = $(this).attr('href'); 
GM_xmlhttpRequest({ 
       method: "GET", 
       url: href, 
       headers: { 
        "Content-Type": "application/x-www-form-urlencoded" 
        }, 
         onload: function(response) { 
           $('#debug').html(''); 
           $('#debug').append(response.responseText).fadeIn(5000); 
             } 
      }); 
}); 

The ссылку внутри ответа, имеет класс ajaxn, а поджигатель дом/HTML панель показывает, что ответ на самом деле вставляется в #debug

любые подсказки?

+0

Вы говорите, что ответ фактически вставлен в #debug. Тогда что не работает? – wimh

+0

Я думаю, что вы удаляете все предыдущее содержимое с помощью вызова '$ ('# debug'). Html ('');'. Попробуйте запустить 'console.log', чтобы выяснить, выполнены ли все xmlHttpRequests? – Laoujin

ответ

2

Вопрос не ясен, но если вы хотите, чтобы click обработчик стрелять, если нажатии на ссылку в #debug содержание (по сравнению с автоматической загрузкой ссылки или ???) ...

Тогда дон Не используйте метод .click(). Используйте jQuery's .on() method это стреляет по току, и в любое будущее, узлы, соответствующие селектору.

код становится чем-то вроде:

$(document).on ("click", ".ajax, .ajaxn", function (event) { 
    event.preventDefault(); 
    var href = $(this).attr('href'); 

    GM_xmlhttpRequest ({ 
     method:  "GET", 
     url:  href, 
     headers: { 
      "Content-Type": "application/x-www-form-urlencoded" 
     }, 
     onload:  function (response) { 
      $('#debug').empty(); 
      $('#debug').append (response.responseText).fadeIn (5000); 
     } 
    }); 
}); 


Кроме того, не используйте $('#debug').html(''); Используйте $('#debug').empty(); вместо этого. Это будет быстрее, и код будет немного более самодокументированным.

+0

+1, хотя было бы немного более эффективно использовать '$ ('# debug'). On (" click "," .ajax, .ajaxn ", function ...', поэтому слушатель запускается только для кликов в пределах 'debug' div. –

+0

@IanRoberts, да, это было бы более эффективно, если не ясно, что * все * узлы' .ajax' или '.ajaxn' находились в элементе' # debug', поэтому я сыграл его безопасно. –

Смежные вопросы