我正在使用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之类的任何东西都会停止工作。
答案 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,并且使用旧的日期选择器对我来说很愚蠢。
当然,自问题发布以来已经有一段时间了,所以现在可能已经弄明白了。