1

我正在使用 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');
});

..使用被调用时返回给浏览器的javascript getScript,那么代码就可以工作了。

调用时返回的 javascriptgetScript只是调用 google barchart 的标准 javascript。在返回的脚本中也省略了脚本标签,因为getScript添加了这些。

问题是,getScript当我可以复制并粘贴返回的脚本并将其替换为该getScript部分时,为什么会在返回的脚本上窒息,以便确定返回的脚本没有缺陷,因为当替换时页面正确呈现制成?

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

<!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 的响应中看到 testscript.js 的内容。只需将 testscript.js 的内容替换为简单的内容,例如alert('hello');getScript 就可以正常工作,但像上面的 testscript.js 和 getScript 这样复杂的内容就会停止工作。

4

2 回答 2

1

在您开始调用其中的函数之前,可能该文件尚未加载。
可以试试success函数中的操作吗?

$.getScript('http://localhost:53353/z/categories', function(data, textStatus, jqxhr) {
   if(textStatus == 'success') {
      //do work here
   }
});
于 2013-04-22T01:06:08.620 回答
0

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

我发现了一种类似的挂起方式,浏览器会变成空白并且似乎永远在加载。

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

当然,问题发布已经有一段时间了,所以现在很可能已经弄清楚了。

于 2013-09-02T05:26:01.057 回答