0

在页面加载时,我调用函数 LinkPages() 并将其 HTML 添加到 aa DIV。

母版页.aspx

    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?

4

3 回答 3

0

在 MasterPage.apsx 上的第一个 XHR 中,您正在调用服务器并取回一些 HTML(我猜这个 Javascript GetMessage 混合在该页面的某个地方)。除非您将 XHR 的 responseText 附加到文档中,否则 JavaScript 将永远不会被评估。所以...在 LinkPages() 中,您需要将 XKR 调用的响应添加到文档中,然后浏览器将评估 GetMessage 函数。在它被添加之前,它只是内存中的一个字符串。在您将它放在 DOM 上之前,它实际上不会变成脚本。我希望这是有道理的。

于 2012-05-15T17:08:57.403 回答
0

在您的情况下,iframe 可能会更好:

<iframe src="Page1.aspx" onload="LinkPages()"></iframe>

如果您更喜欢 xmlHttpRequest,那么您需要找到一种在收到响应后运行脚本的方法,正如 @aaronfrost 所解释的那样。像 jQuery 这样的库会为你做这件事(如果你使用 jQuery.load,jQuery 有一个可以运行脚本的 globalEval 函数)。

于 2012-05-15T17:18:03.867 回答
-1

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 是否依赖于您需要加载的任何库。可以在运行时添加新的库脚本。
  • 直接调用 xmlhttprequest 是一个非常糟糕的主意。使用 jQuery 或其他库作为中间体。

添加

为什么直接调用 xmlhttprequest 是个坏主意:

  1. 错误。您必须编写更多软件(而不是使用库)。更多 sw == 更多错误、更多维护等。一个坏主意。
  2. 测试。您的软件必须变得依赖于功能或依赖于浏览器。无论哪种方式,您的代码都比依赖于许多人/应用程序使用的经过良好测试和支持的库更脆弱。该库的广泛使用使您可以确保它随着浏览器的变化而继续正常运行。
  3. 可维护性。与使用标准库的软件相比,您的附加软件(用于处理不同的浏览器案例)需要维护人员更长的时间来理解和更新。
  4. 费用。更多的错误、更少的测试和更多的维护难度意味着随着时间的推移,您的软件将比使用标准库的 sw 成本更高。
  5. 虚假经济。JS 库有很多选择。如果下载大小有问题,您可以使用更完整的(更大)或更小、更轻的库。(请注意,我说应该使用 lib,我当然没有说需要使用 jQuery。)
  6. 重复的代码。现在库非常普遍,一个库已经被页面加载或者可以从浏览器缓存中加载的可能性非常大。在任何一种情况下,使用非库代码都会比使用库占用更多的空间/时间。

总之,不使用标准库的唯一原因是如果您是学生并且作业禁止使用库。

我看不出一个熟练的开发人员有什么理由不使用库来覆盖 Ajax 调用的浏览器不兼容性。如果您不同意,请提供评论。

于 2012-05-15T17:09:02.670 回答