我有一个关于将iOS / Android应用移植到Win8的问题。我目前正在使用http://srobbin.github.com/jquery-pageslide/ pageslide的修改版本和ajax调用来加载menu.html页面。 AJAX调用如下所示......
$.ajax({
url: $str,
dataType: "text",
success: function(data) {
$("#menu").html(data);
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
在Win8中,我收到此错误..
Exception was thrown at line 8490, column 29 in ms-appx://664ace5f-4774-4928-bc94-ad4650a1ede1/js/jquery-1.8.2.js
0x80070005 - JavaScript runtime error: Access is denied.
这是jQuery代码中断的地方。
if (s.username) {
xhr.open(s.type, s.url, s.async, s.username, s.password);
} else {
xhr.open(s.type, s.url, s.async); //<-------------------
}
我做了一些研究,似乎Windows 8不允许本地ajax调用。如何将其转换为WinJS.xhr调用或可在Win8上运行的东西?
编辑 - 第一次回答后。
我要做的是转到$ str(这是带有菜单html的文件的url,即menu.html)并通过html调用填充$('#menu') 。我将什么放入XHR返回以从menu.html获取文本然后在成功调用上我可以将其分配给文件。
我第一次搞乱XHR / AJAX所以请原谅任何无知。
编辑#2
我重做了使用WinJS.xhr的jquery调用...,如下面的代码所示。
WinJS.xhr({
type: "GET",
url: $str,
responseType: "text",
}).then(function(success){
console.log(success);
},
function (error) {
console.log(error);
}
);
这仍然会返回拒绝访问的异常。在这段基础java代码..
req.open(
options.type || "GET",
options.url,
// Promise based XHR does not support sync.
//
true,
options.user,
options.password
);
此处记录了例外情况。
SCRIPT5: Exception is about to be caught by JavaScript library code at line 2332, column 21 in ms-appx://microsoft.winjs.1.0/js/base.js
0x80070005 - JavaScript runtime error: Access is denied.
如果文件名/路径($ str)被更改为不正确的路径,那么我会收到resource_not_found错误,这是不言自明的。我不知道现在该尝试什么。有人有解决方案吗?
答案 0 :(得分:1)
您说过您正在点击的网址是&#34; local&#34;。它是机器上的单独服务还是同一项目中的另一个文件? 如果它是前者那么实际上它应该在你开发的时候仍然有用,但在生产中它将被禁止。认证过程不允许应用程序向localhost发出请求。 我怀疑后者。在这种情况下,您肯定应能够使用xhr请求它。在Fragments and Pages演示中查看我的codeSHOW项目(link)。另请参阅WinJS.xhr演示。
编辑 - 也想包括答案。 (很棒的应用!!)
这将取代jquery中的$ .ajax调用。
WinJS.xhr({
url: '/menu.html',
responseType: "document",
}).then(function(xhr){
var temp = xhr.response.childNodes[0].innerHTML;
$('#menu').html(temp);
}
);
答案 1 :(得分:0)
使用xhr回调并返回您自己的xhr。 http://api.jquery.com/jquery.ajax/
$.ajax({
url: $str,
xhr: function(){
return yourDesiredXHRHere;
},
dataType: "text",
success: function(data) {
$("#menu").html(data);
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});