jquery getScript在返回的脚本上窒息

时间:2013-04-22 00:37:28

标签: jquery asp.net asp.net-mvc asp.net-mvc-4

我正在使用MVC 4,它可以正常返回JavaScriptResult。我用简单的javascript测试过它。

然而,虽然我可以在firebug中看到getScript将javascript返回给浏览器,但下面的代码不起作用:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Categories Page</title>
<script type='text/javascript' src='https://www.google.com/jsapi'></script>
<script src="~/Scripts/jquery-2.0.0.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $.getScript('http://localhost:53353/z/categories');
    });   
</script>
</head>    
<body>
    <h2>test</h2>
    <div id="chart_div">
    </div>        
</body>
</html>

但如果我更换:

$(document).ready(function () {
        $.getScript('http://localhost:53353/z/categories');
});

..使用在调用getScript时返回给浏览器的javascript,代码确实可以正常工作。

调用getScript时返回的javascript只是调用Google条形图的标准JavaScript。返回的脚本中也省略了脚本标记,因为getScript添加了这些标记。

问题是,当我可以复制并粘贴返回的脚本并将其替换为getScript部分时,为什么getScript会对返回的脚本造成阻塞,以便确切知道返回的脚本是否有缺陷,因为在进行替换时页面会正确呈现?

行。让我们忘掉MVC吧。 只使用HTML(和基于示例的javascript) https://developers.google.com/chart/interactive/docs/gallery/barchart),我们有以下工作:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Categories Page</title>
    <script type='text/javascript' src='https://www.google.com/jsapi'></script>
    <script src="scripts/jquery-2.0.0.js"></script>
    <script type="text/javascript" src="scripts/testscript.js"></script>
</head>
<body>
    <h2>test</h2>
    <div id="chart_div">
    </div>    
</body>
</html>

testscript.js仅包含:

google.load('visualization', '1', { packages: ['corechart'] });
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
    ['Year', 'Sales', 'Expenses'],
    ['2004', 1000, 400],
    ['2005', 1170, 460]       
]);
var options = { title: 'Company Performance', vAxis: { title: 'Year', titleTextStyle: { color: 'red' } } };
var chart = new google.visualization.BarChart(document.getElementById('chart_div')); chart.draw(data, options); }

但是,如果我们现在重写这条线......

<script type="text/javascript" src="scripts/testscript.js"></script>

...作为

<script type="text/javascript">
    $(document).ready(function () {
        $.getScript('scripts/testscript.js');
    });
</script>

...即使您可以在Firebug中的Response中看到testscript.js的内容,浏览器也会挂起。只需将testscript.js的内容替换为alert('hello');之类的简单内容就可以使getScript正常工作,但是上面的testscript.js和getScript之类的任何东西都会停止工作。

2 个答案:

答案 0 :(得分:1)

在开始调用其中的函数之前,可能还没有加载文件。
你可以尝试成功功能中的操作吗?

$.getScript('http://localhost:53353/z/categories', function(data, textStatus, jqxhr) {
   if(textStatus == 'success') {
      //do work here
   }
});

答案 1 :(得分:0)

我尝试将$.getScript用于我正在处理的应用程序,以推迟加载相当繁重的日期选择器脚本,直到知道实际需要它为止。

我发现了一种类似的悬挂,浏览器只是空白,似乎永远在加载。

我检查了DOM,我发现日期选择器脚本使用document.write()调用操作文档,而不是附加到文档,它们已替换整个文档。摆脱那些在我的应用程序中解决了这个问题的人,但我后来发现我已经有了jQuery UI,并且使用旧的日期选择器对我来说很愚蠢。

当然,自问题发布以来已经有一段时间了,所以现在可能已经弄明白了。