Javascript 敲除JS脚本在Chrome中工作,但在IE9中不工作
我有一个网页在Chrome上运行得很好,但在IE9上却不行。控制台上由此错误产生的错误是 SCRIPT5022:无法分析绑定。 消息:[对象错误]; 绑定值:foreach:statlist HTML格式如下:Javascript 敲除JS脚本在Chrome中工作,但在IE9中不工作,javascript,knockout.js,Javascript,Knockout.js,我有一个网页在Chrome上运行得很好,但在IE9上却不行。控制台上由此错误产生的错误是 SCRIPT5022:无法分析绑定。 消息:[对象错误]; 绑定值:foreach:statlist HTML格式如下: <html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name=
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="statsarea" data-bind="foreach: statlist">
<p> TypeCount: <strong data-bind="text: TypeCount"></strong>, Priority: <strong data-bind="text: SentDate"></strong>
<br/>
</p>
</div>
<script src="js/jquery-1.9.0.js" type="text/javascript"></script>
<script src="js/knockout-2.2.1.js" type="text/javascript"></script>
<script src="models/messagecount.js" type="text/javascript"></script>
</body>
</html>
还有一条信息是,来自API的json看起来像这样。我不确定是不是因为TypeCount不是字符串
[
{
"TypeCount": 102,
"SentDate": "2014-08-18T00:00:00.000Z"
}
]
使用
async:false
不是一个好主意。这可能是因为您没有在ViewModel中将statlist
初始化为属性。更好的解决方案是将statlist
设置为一个可观察的数组,然后在准备好设置数据时进行异步调用
例如:
function MessageCountDataModel() {
var self = this;
self.statlist = ko.observableArray();
self.loadData = function() {
$.ajax({
'url': "http://localhost:8080/API/getstats.json",
'datatype': "json",
'success': function(data) {
self.statlist(data);
}
});
};
self.loadData();
}
ko.applyBindings(new MessageCountDataModel());
为什么要将
allCounts
设置为调用一个永远不会返回任何内容的函数的结果?我喜欢这样,但它在IE.9中仍然不起作用。现在我甚至没有看到任何HTML被生成。Chrome仍然工作得很好。我只是检查了Firefox,它也在Firefox中工作。只是IE9不起作用不确定为什么…有可能在IE9和其他浏览器下给出一个可重现错误的链接吗?我想我可能已经想到了这个问题。我的测试web服务器在端口3000上运行,RESTAPI在同一台机器的不同部分上。我相信这与IE中的跨源代码有关,我现在只需要知道如何修复:)我想知道您是否为API和客户端使用了两个不同的端口,以及它在Chrome和FF上的工作方式。您需要使用相同的端口,或者可能需要将响应转换为JSONP而不是JSON。
function MessageCountDataModel() {
var self = this;
self.statlist = ko.observableArray();
self.loadData = function() {
$.ajax({
'url': "http://localhost:8080/API/getstats.json",
'datatype': "json",
'success': function(data) {
self.statlist(data);
}
});
};
self.loadData();
}
ko.applyBindings(new MessageCountDataModel());