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