Ничего не могу сделать с ответом Ajax в расширении Firefox - PullRequest
2 голосов
/ 11 июля 2011

Я пишу простой AJAX-вызов, который возвращает полную HTML-страницу, а затем я пытаюсь получить некоторые значения, которые мне нужны, из этого ответа. Я не знаю, почему это не работает, и я сделал все, что мог придумать. работает , когда мой код является частью другой HTML-страницы, но не частью расширения Firefox, и в этом проблема: я пишу расширение Firefox!

В расширении Firefox я получаю ответ и могу предупредить, и он есть (т.е. я вижу текст ответа)! но я не могу назвать .find, .filter или что-то еще на самом деле. В какой-то момент в функции успеха код прерывается, и ничего не происходит.

Вот мой код:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
        <title>runthis</title>

        <script type="text/javascript" language="javascript" src="jquery-1.6.2.js"></script>

        <script type="text/javascript">
        $(document).ready(function(){
                $('input').click(function(){
                var makeTransferURL = "empty";
                                var pc = "empty";

                        $.ajax({//Transfer
                            type: "POST",
                            url: "http://localhost/transfer2.html",
                            data: "",
                            dataType: "html",
                            context: document.body,
                            success: function(response){
                                var table = $(response).find('table.123RowSeparator');
                                var a     = table.find('a[href*="123"]');
                                var href  = a.attr("href");
                                makeTransferURL = href;
                                var link = makeTransferURL.indexOf('PC_');
                                pc = makeTransferURL.substring(link, (link + 11));
                                alert(pc);
                            },
                            error: function() {
                                alert("Sorry, The requested property could not be found.");
                            }  
                        });
                });
        });
        </script>
</head>
<body>
        <input type="button" value="load" />
</body>
</html>

Точно такой же код, как у расширения Firefox, не работает:

    window.addEventListener("load", function() { myExtension.init(); }, false);

var myExtension = {
        init: function() {
        gBrowser.addEventListener("DOMContentLoaded", myExtension.onPageLoad, true);
    },
    onPageLoad: function(aEvent) {
        var doc = aEvent.originalTarget; // doc is document that triggered "onload" event

    if(doc.location.href=="http://localhost/index2.html") {

        var makeTransferURL = "empty";
        var verifyTransferURL = "empty";
        var confirmTransferURL = "empty";
        var token1 = "empty";
        var token2 = "empty";
        var pc = "empty";

       $.ajax({//Transfer
            type: "POST",
            url: "http://localhost/transfer2.html",
            data: "",
            cache: false,
            async: false,
            dataType: "html",
            context: document.body,
            success: function(response){
                var table = $(response).find('table.123RowSeparator');
                var a     = table.find('a[href*="123"]');
                var href  = a.attr("href");
                makeTransferURL = href;
                var link = makeTransferURL.indexOf('PC_');
                pc = makeTransferURL.substring(link, (link + 11));
                alert(pc);
            },
            error: function() {
                alert("Sorry, The requested property could not be found.");
            }
        });
    }  
    aEvent.originalTarget.defaultView.addEventListener("unload", function(){ myExtension.onPageUnload(); }, true);
    },
    onPageUnload: function(aEvent) {}
}

Мне нужно знать почему !

Вот HTTP-заголовок ответа:

HTTP/1.1 200 OK
Date: Mon, 11 Jul 2011 10:43:32 GMT
Server: Apache/2.2.19 (Win32)
Last-Modified: Wed, 06 Jul 2011 12:41:47 GMT
ETag: "9000000015529-f7b9-4a765ec7780ff"
Accept-Ranges: bytes
Content-Length: 63417
Keep-Alive: timeout=5, max=97
Connection: Keep-Alive
Content-Type: text/html

1 Ответ

1 голос
/ 13 июля 2011

Нашел решение, это не элегантно (или правильная практика), но дай мне передохнуть!Никто не ответил:)

Вот что я сделал, чтобы заставить это работать:

$('#divid').css('display', 'none');
                response = response.replace(/<head>(?:.|\n|\r)+?<\/head>/ig, "");
                doc.getElementById('divid').innerHTML = response.replace(/<script[^>]*>[\S\s]*?<\/script[^>]*>/ig, "");
                var table = $('#divid').find('whateveryoufeellike');

Так что я думаю, что проблема заключалась в том, что я получал обычную строку в формате HTML, и я не мог 't использовать функции jQuery, такие как .find и .filter, в такой строке.Взял строку и с помощью регулярных выражений вычеркнул ее из заголовков и тегов сценария и (вероятно, сделать изображения слишком рано) выбросил то, что осталось в созданном мной Div.Но не перед тем, как установить div для скрытия, чтобы код не показывался.Пользователь на самом деле не чувствует никакой разницы, и теперь я могу использовать DOM для материнской страницы и запустить все .finds и .filters, что душе угодно!

Там красота в том, что между коллизиями не будет проблемтеги с тем же идентификатором / классом на той же странице, если имя Div, которое вы делаете на своей странице, является уникальным для этой страницы.Так что что-то действительно случайное было бы хорошим выбором: D предложения ...! HWSyujtewq $ y $ y $ w £ t! "£% ^ (&) % $ dsfdgjnbfdvsc

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