在Firefox扩展中无法对Ajax响应做任何事情

时间:2011-07-11 11:02:47

标签: javascript ajax jquery firefox-addon

我正在编写一个简单的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 个答案:

答案 0 :(得分:1)

找到解决方案,它不优雅(或正确的练习),但给我一个休息!没有人回答:)

以下是我为此付出的努力:

$('#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格式的字符串,我不能在像这样的字符串上使用像.find和.filter这样的jQuery函数。取出字符串并使用正则表达式,将其从头部和脚本标签上条带化,并且(可能很快就会拍摄图像)抛弃我创建的Div中留下的内容。但是在将div设置为隐藏之前不会显示代码。用户感觉没有任何区别,我现在可以将DOM用于母版页,并运行我心中所需的所有.finds和.filters!

它的美妙之处在于,只要您在页面中创建的Div的名称对于该页面是唯一的,在同一页面上具有相同ID /类的标签之间就不会出现任何碰撞问题。因此,一些非常随机的东西将是一个不错的选择:D建议......!HWSyujtewq $ y $ y $ w£t!“£%^ (&amp;)%$ dsfdgjnbfdvsc