XMLHttpRequest和调用Javascript
在页面加载时,我调用函数LinkPages,并将其HTML添加到一个DIV中 MasterPage.aspxXMLHttpRequest和调用Javascript,javascript,asp.net,html,xmlhttprequest,Javascript,Asp.net,Html,Xmlhttprequest,在页面加载时,我调用函数LinkPages,并将其HTML添加到一个DIV中 MasterPage.aspx function LinkPages() var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else {// code for IE6, IE5
function LinkPages()
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
alert(xmlhttp.responseText);
}
}
xmlhttp.open("GET", "Page1.aspx", true);
xmlhttp.send();
}
我遇到的问题是Page1.aspx在函数GetMessage中也有一个XMLHttpRequest,它从未被调用过。GetMessage是
假设在Page1.aspx上设置一个span的innerHTML,但它没有被调用
第1.aspx页
function GetMessage()
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("lblMessage").innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET", "wfrmHelper.aspx?action=message", true); --returns string
xmlhttp.send();
}
可以在XMLHttpRequest中调用页面上的javascript吗?在MasterPage.apsx上的第一个XHR中,您正在调用服务器并返回一些HTML,我猜这个javascript GetMessage在该页面的某个地方混合了。除非将XHR的responseText附加到文档中,否则JavaScript将永远不会得到评估。所以在LinkPages中,您需要将XKR调用的响应添加到文档中,然后浏览器将评估GetMessage函数。在添加之前,它只是内存中的一个字符串。在您将其放置到DOM上之前,它实际上不会变成脚本。我希望这是有道理的 Re:是否可以在XMLHttpRequest的响应页面中调用javascript 是的,但是当您将响应添加到页面时,它不会自动发生 相反,您需要在响应中找到脚本,然后调用每个脚本 更好的是响应包含两个部分:一个用于html,另一个用于要执行的脚本。例如,响应在JSON结构中有两个属性:
{'html': '<div>blah blah....', // the html part of the response
'js': 'the javascript....'} // the javascript that you want to execute
也
您还需要考虑传入JS是否依赖于需要加载的任何LIBs。可以在运行时添加新的库脚本。
直接调用xmlhttprequest是一个非常糟糕的主意。使用jQuery或其他库作为中介。
增加
为什么直接调用xmlhttprequest是个坏主意:
漏洞。与使用库相比,您必须编写更多的软件。更多的软件==更多的错误,更多的维护,等等。一个坏主意。
测试。您的软件必须依赖于功能或浏览器。无论哪种方式,您的代码都比依赖许多人/应用程序使用的经过良好测试和支持的库更脆弱。该库的广泛使用为您提供了保证,随着浏览器的变化,它将继续正常工作。
可维护性。与使用标准库的软件相比,处理不同浏览器情况的附加软件需要维护人员更长的时间来理解和更新。
费用更多的bug、更少的测试和更大的维护难度意味着,随着时间的推移,您的软件将比使用标准库的软件花费更多。
虚假经济。JS库有很多选择。如果下载大小有问题,您可以使用更完整、更大或更小、更轻的libs。请注意,我说过应该使用lib,我当然没有说需要使用jQuery。
重复的代码。现在库非常普遍,一个库已经被页面加载或者可以从浏览器缓存加载的可能性非常大。在这两种情况下,使用非库代码将比使用lib占用更多的空间/时间。
总之,不使用标准库的唯一原因是如果您是学生,并且作业禁止使用库
我看不出熟练的开发人员有任何理由不使用lib来掩盖Ajax调用的浏览器不兼容。如果您不同意,请提供意见。在您的情况下,iframe可能会更好:
<iframe src="Page1.aspx" onload="LinkPages()"></iframe>
如果您更喜欢xmlHttpRequest,那么您需要找到一种在得到响应后运行脚本的方法,正如@aaronfrost所解释的那样。如果您使用jQuery.load,像jQuery这样的库会帮您完成这项工作。jQuery有一个globalEval函数来运行脚本。.NET现在随jQuery一起提供。为什么要艰难地执行XHR?在哪里调用GetMessage函数?一旦Page1.aspx加载完毕,您就必须这样做。我使用XHR是因为在这个项目的构建中,我们没有在网页上使用jQuery,而是使用moo工具。-我可以随意说您更喜欢jQuery,但不要说直接调用xmlhttprequest是一个非常坏的主意。请参阅我对答案的补充。