Я не могу понять, почему URL-адрес не изменится для моего GM_xmlhttpRequest в моем скрипте Greasemonkey - PullRequest
1 голос
/ 27 января 2011

У меня действительно очень неприятная проблема, я надеюсь, что кто-то может мне помочь. Вот фрагмент моего скрипта Greasemonkey, я не могу понять, почему асинхронные запросы всегда отправляются на один и тот же URL.

function parse(details) {
     var element = $(details);
     var coll = element.find("#my valid selector");

     $.each(coll, function(index, href) { 
          SendData(href);
     });
 }

 function SendData(url) {
      GM_xmlhttpRequest ({
       method: 'GET',
       url: url,
       headers: {
        'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
        'Accept': 'application/atom+xml,application/xml,text/xml',
       },
       onload: function(responseDetails) {
          doSomething(responseDetails.responseText);
       }
     });    
}

Когда я запускаю Fiddler, я вижу, что он делает один и тот же запрос независимо от того, сколько предметов находится в моей коллекции. Какой бы ни была первая ссылка, все запросы делаются на эту ссылку. Я проверил, что метод parse каждый раз успешно передает другую ссылку на функцию SendData, но запросы всегда направляются на первый URL в коллекции.

Я думал, что у меня было похоже на то, что я нашел здесь , но, возможно, я что-то упускаю. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 28 января 2011

Кажется, что url не захватывается при закрытии , поэтому он не определен для всех, кроме первого GM_xmlhttpRequest запуска.

Изменение SendData(), вот так:

function SendData(url)
{
    var moreSubstantial = url + " ";

    GM_xmlhttpRequest(
    {
        method:     'GET',
        url:        moreSubstantial,

должно быть достаточно.


Или вы можете получать страницы последовательно. Измените parse() на что-то вроде:

function parse (details)
{
    var element     = $(details);
    var coll        = element.find("#my valid selector");
    var TargetPages = coll.map (function() {return this.href;} );

    (function getNextPage (J)
    {
        var PageURL = TargetPages[J];

        GM_xmlhttpRequest
        ( {
            method:     "GET",
            url:        PageURL,
            headers:    {
                            'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
                            'Accept': 'application/atom+xml,application/xml,text/xml',
                        },
            onload:     function (responseDetails)
                        {
                            doSomething (responseDetails.responseText);

                            if (--J >= 0)
                                getNextPage (J);
                        }
        } );
    } ) (TargetPages.length - 1);
 }
...