jquery通过ajax加载脚本

jquery通过ajax加载脚本,jquery,ajax,internet-explorer,layout,Jquery,Ajax,Internet Explorer,Layout,一些设置: 我有一个网站,允许用户运行报告并获得结果。该站点使用jquery布局创建北、南、西和中心分区。北部有页眉和导航菜单,南部有页脚信息,西部有报告链接列表,中心显示报告结果(中心最初为空)。使用DataTables插件以表格形式显示报告数据。为了简化示例,所有报告数据都在一个ajax调用中返回,然后呈现为DataTable 因此,示例流程如下所示: main.html: 装载 加载jquery、布局和数据表 使用页眉、菜单、页脚和报告链接设置布局。中间空白 用户: 单击“报告-1

一些设置:
我有一个网站,允许用户运行报告并获得结果。该站点使用jquery布局创建北、南、西和中心分区。北部有页眉和导航菜单,南部有页脚信息,西部有报告链接列表,中心显示报告结果(中心最初为空)。使用DataTables插件以表格形式显示报告数据。为了简化示例,所有报告数据都在一个ajax调用中返回,然后呈现为DataTable

因此,示例流程如下所示:

  • main.html:
    • 装载
    • 加载jquery、布局和数据表
    • 使用页眉、菜单、页脚和报告链接设置布局。中间空白
  • 用户:
    • 单击“报告-1”链接
  • main.html:
    • 调用jquery.load(“report1.html”)。(通常report1是一个php脚本)
    • 这将返回包含数据的报表表并加载到中心div。
      • 注意:返回的内容是html和js。假设将使用main.html中加载的DataTables插件。因此,报告内容中不包含datatable的负载
    • 加载的js代码使用命名空间“CenterContent”,并具有Initialize()函数
    • 加载成功后,调用initialize(),执行$(“#report1”).datatable()
  • 使用者
    • 愉快地在一个漂亮的数据表中查看数据
这一切在Firefox、Chrome、Safari和大多数IE中都能很好地工作。然而,在最新的IE(10.0.9200.16750)中似乎有所改变——IE的前一个版本(10.0.9200.16580)工作正常。我现在对最新的IE有一些问题——当调用Initialize()并获取“Object不支持属性或方法'DataTable'时,DataTable没有呈现”

我创建了一些示例文件并进行了一些测试。我发现,如果report1.html包含一个包含DataTables插件的脚本标记(从而在ajax加载时强制加载DataTables),那么最新的IE将按预期工作。 (注意:当DataTables脚本标记从main.html移动到report1.html时,它必须从与main.html.AFAIK相同的域加载,从另一个域加载是违反ajax的,并且当脚本标记位于ajax加载的内容中时,它似乎生效。)

我可以将DataTable插件加载移动到报告响应,但这意味着每次运行报告时都会加载插件。似乎是浪费时间和精力。当用户一个接一个地运行报告时,这是否会造成任何重复??这种食谱有什么“最佳实践”吗

为什么最新的IE会抛出这个错误?而不是以前的IE?我在MS公告中找不到IE()的任何解释

下面是我的两个示例文件。 非常感谢您的帮助/建议/指点

main.html和report1.html

  • main.html


//设置一些东西来检测浏览器类型
MyNamespace={};//屏幕每个可加载部分的主命名空间和子命名空间空间
MyNamespace.CenterContent={};//这部分加载了数据和JS
$(文档).ready(函数(){
$('body').layout();
});
函数loadObject(objStr,url){
$(objStr).load(url+“?”+Date.now(),函数(响应、状态、xhr){
如果(状态=“错误”){
$(objStr.html(“很抱歉,出现错误:”+msg+xhr.status+“”+xhr.statusText+”

); }否则{//成功 请尝试{MyNamespace.CenterContent.JS.Initialize();} catch(e){console.log(“E3:+e.message);} } }); 返回false; } 测试应用 北 南方
  • report1.html:


(函数(名称空间,$,未定义){
nameSpace.Initialize=function(){
$('#report1')。数据表();
};
}(window.MyNamespace.CenterContent.JS=window.MyNamespace.CenterContent.JS | |{},jQuery));
渲染引擎
浏览器
月台
引擎版本
CSS等级
壁虎
火狐1.0
Win 98+/OSX.2+
1.7
A.
壁虎
卡米诺1.5
OSX.3+
1.8
A.
壁虎
Netscape Navigator 9
Win 98+/OSX.2+
1.8
A.
壁虎
Mozilla 1.0
Win 95+/OSX.1+
1.
A.
<!DOCTYPE html>
<html>
<head>
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="-1">

    <link rel="shortcut icon" href="/favicon.ico" />
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>

    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>
<!--
-->
    <script src="http://layout.jquery-dev.net/lib/js/jquery.layout-latest.js"></script>
    <link rel="stylesheet" type="text/css" href="http://layout.jquery-dev.net/lib/css/layout-default-latest.css" />

    <script type="text/javascript">
        // Set up some stuff to detect the browser type
        MyNamespace = {};    // Main Namespace and Subnamespaces for each loadable section of the screen
        MyNamespace.CenterContent = {};        // This part is loaded with data and JS

        $(document).ready(function () {
            $('body').layout();
        });

        function loadObject(objStr, url) {
            $(objStr).load(url +"?_" + Date.now(), function(response, status, xhr) {
                if (status == "error") {
                    $(objStr).html('<p>Sorry but there was an error: ' + msg + xhr.status + " " + xhr.statusText + '</p>');
                } else {    // Success
                    try { MyNamespace.CenterContent.JS.Initialize(); }
                    catch(e) { console.log("E3: " + e.message); }
                }
            });
            return false;
        }
    </script>    
    <title>Test Application</title>
</head>
<body>
    <div class="ui-layout-north"><center><h1>North</h1></center></div>
    <div class="ui-layout-west">
        <a href="#" onclick="loadObject('#CenterContent', 'report1.html');" style="font-family:Arial;font-size:10pt;">Report-1</a>
    </div>
    <div class="ui-layout-south"><center><h1>South</h1></center></div>
    <div class="ui-layout-center"><span id="CenterContent"></span></div>
</body>
</HTML>
<head>
<!--  This doesn't seem to work.  I think bcause it is ouside the domain and since it is in ajax loaded content won't load
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>
uncomment next line and have DataTables local - then works as expected.
<script type="text/javascript" src="./DataTables-1.9.4/media/js/jquery.dataTables.min.js"></script>
-->
</head>
<script>
    (function( nameSpace, $, undefined ) {
        nameSpace.Initialize = function() {
            $('#report1').dataTable();                
        };
    }( window.MyNamespace.CenterContent.JS = window.MyNamespace.CenterContent.JS || {}, jQuery ));
</script>    

<div id="demo">
    <table id="report1">
        <thead>
            <tr>
                <th>Rendering engine</th>
                <th>Browser</th>
                <th>Platform(s)</th>
                <th>Engine version</th>
                <th>CSS grade</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Gecko</td>
                <td>Firefox 1.0</td>
                <td>Win 98+ / OSX.2+</td>
                <td>1.7</td>
                <td>A</td>
            </tr>
            <tr>
                <td>Gecko</td>
                <td>Camino 1.5</td>
                <td>OSX.3+</td>
                <td>1.8</td>
                <td>A</td>
            </tr>
            <tr>
                <td>Gecko</td>
                <td>Netscape Navigator 9</td>
                <td>Win 98+ / OSX.2+</td>
                <td>1.8</td>
                <td>A</td>
            </tr>
            <tr>
                <td>Gecko</td>
                <td>Mozilla 1.0</td>
                <td>Win 95+ / OSX.1+</td>
                <td>1</td>
                <td>A</td>
            </tr>
        </tbody>
    </table>
</div>