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

最佳答案

找到了解决方案,它不是很好(或正确的做法),但请给我休息一下!没有人回答:)

这是我为使此功能起作用而所做的工作:

$('#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!“£%^(&)%$ dsfdgjnbfdvsc

10-08 15:46