GreaseMonkey: GM_xmlhttpRequest возвращает значение вызывающей функции - PullRequest
1 голос
/ 26 августа 2011

Я возился с этим часами, и я выдернул на него свои волосы. Как мне вернуть var a из myFunction, чтобы он мог быть установлен как var b, а затем отображать значение b в сообщении с предупреждением? Спасибо! :)

function myFunction(arg)
{
var a;

GM_xmlhttpRequest({
  method:"GET",
  url:"http://site.com/arg?" + arg,
  headers:{
    "User-Agent":"monkeyagent",
    "Accept":"text/monkey,text/xml",
    },
  onload:function(details) {
    a = details.responseText;


  }
});

return a;

}

b = myFunction("blabla");
alert(b);

Когда я попробовал, он вернул просто пустое сообщение.

1 Ответ

1 голос
/ 26 августа 2011

Вы не можете вернуть a таким образом, потому что GM_xmlhttpRequest работает асинхронно.

Функция загрузки будет срабатывать еще долго после возврата myFunction.Все, что вы хотите сделать с a, должно будет выполняться из функций, вызываемых в функции onload.

Greasemonkey just добавлена ​​поддержка синхронного режима, начиная сс версией 0.9.9.Если необходимо, вы можете скачать предварительный выпуск версии 0.9.10, здесь .

Однако вы бы научились обрабатывать подобные вещи асинхронно.Вы получите более быстрый и отзывчивый интерфейс вместо «зависаний» и «зависаний».Это хорошая идея, чтобы заниматься всеми видами реальных ситуаций программирования.

...