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