我在24.0.1312.52 m
使用 jQuery 1.8.2、jQuery UI 1.8.23 和 Knockout 2.2.0 的页面上的 Google Chrome 版本中出现错误。当我加载页面时,对一个简单的 URL 的 HTTP 请求失败GET data: HTTP/1.1
,它是从初始化 jQuery UI 对话框的语句生成的(代码见帖子底部)。该页面工作正常,但这会导致状态栏和 JS 控制台中出现错误,我想避免吓到我的用户。该错误不会出现在 IE 9 或 FireFox 15.0.1 中,但会出现在 Safari 5.1.7 (Windows) 中。在 Chrome Inspector 中,错误的调用堆栈如下所示:
GET data: jquery.min.js:2
a.getComputedStyle.bH jquery.min.js:2
p.extend.css jquery.min.js:2
bZ jquery.min.js:2
b$ jquery.min.js:2
p.fn.extend.show jquery.min.js:2
p.each.p.fn.(anonymous function) jquery.min.js:2
a.fn.extend.show jquery-ui.min.js:5
a.widget._create._renderAxis jquery-ui.min.js:5
a.widget._create jquery-ui.min.js:5
a.Widget._createWidget jquery-ui.min.js:5
a.widget.a.(anon function).(anon function) jquery-ui.min.js:5
a.widget.bridge.a.fn.(anonymous function) jquery-ui.min.js:5
p.extend.each jquery.min.js:2
p.fn.p.each jquery.min.js:2
a.widget.bridge.a.fn.(anonymous function) jquery-ui.min.js:5
a.widget._makeResizable jquery-ui.min.js:5
a.widget._create jquery-ui.min.js:5
a.Widget._createWidget jquery-ui.min.js:5
a.widget.a.(anon function).(anon function) jquery-ui.min.js:5
a.widget.bridge.a.fn.(anonymous function) jquery-ui.min.js:5
p.extend.each jquery.min.js:2
p.fn.p.each jquery.min.js:2
a.widget.bridge.a.fn.(anonymous function) jquery-ui.min.js:5
ko.bindingHandlers.jqDialog.init QualityWalkViewModel.js:78
b.j.W knockout-2.2.0.js:11
g knockout-2.2.0.js:43
b.j knockout-2.2.0.js:45
W knockout-2.2.0.js:10
X knockout-2.2.0.js:12
Y knockout-2.2.0.js:12
X knockout-2.2.0.js:12
Y knockout-2.2.0.js:12
X knockout-2.2.0.js:12
b.Ca knockout-2.2.0.js:58
registerVM 3896:378
(anonymous function) 3896:362
p.Callbacks.k jquery.min.js:2
p.Callbacks.l.fireWith jquery.min.js:2
p.extend.ready jquery.min.js:2
D jquery.min.js:2
它在三个地方引用了我的脚本:
ko.bindingHandlers.jqDialog.init QualityWalkViewModel.js:78
registerVM 3896:378
(anonymous function) 3896:362
3896 是页面的名称(它是 URL 的 ID 段,例如 /WalkThrough/Edit/3896
)。引用行的代码是:
(anonymous function) 3896:362
360 <script type="text/javascript">
361 $( function() {
362 registerVM(); <--- here
registerVM 3896:378
374 <script type="text/javascript">
375 var vm; // debug
376 function registerVM() {
377 vm = new QualityWalkViewModel( initialQualityWalkData );
378 ko.applyBindings( vm ); <--- here
379 }
QualityWalkViewModel.js:78
68 ko.bindingHandlers.jqDialog = {
69 init: function( element, valueAccessor ) {
70 var options = ko.utils.unwrapObservable( valueAccessor() ) || {};
71
72 // handle disposal
73 ko.utils.domNodeDisposal.addDisposeCallback( element, function() {
74 $( element ).dialog('destroy');
75 });
76
77 // init the dialog
78 $( element ).dialog( options ); <--- here
79 }
80 };
最后一个脚本是一个自定义绑定处理程序,用于初始化 jQuery UI 对话框,改编自http://jsfiddle.net/rniemeyer/WpnTU/,以响应JQuery 对话框中的 MVC Knockout JS
如果我注释掉这一行$( element ).dialog( options );
,错误就会消失。知道为什么 jQuery UI 会生成一个空data:
url 并尝试请求它吗?