Javascript 如何将jquery ajax调用转换为WinJS.xhr或等效的Win8
我有一个关于将iOS/Android应用程序移植到Win8的问题。我目前正在使用一个带有ajax调用的pageslide的修改版本来加载旁边的menu.html页面。AJAX调用如下所示Javascript 如何将jquery ajax调用转换为WinJS.xhr或等效的Win8,javascript,jquery,ajax,winjs,Javascript,Jquery,Ajax,Winjs,我有一个关于将iOS/Android应用程序移植到Win8的问题。我目前正在使用一个带有ajax调用的pageslide的修改版本来加载旁边的menu.html页面。AJAX调用如下所示 $.ajax({ url: $str, dataType: "text", success: function(data) { $("#menu").html(data); }, error: function (xhr, a
$.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); //<-------------------
}
这仍然返回访问被拒绝异常。在这段基础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\u not\u found错误,这是不言自明的。我不知道现在该试什么。有人有解决方案吗?使用xhr回调并返回您自己的xhr
使用xhr回调并返回您自己的xhr
你说你点击的网址是“本地的”。它是机器上的独立服务还是同一项目中的另一个文件? 如果是前者,那么实际上在开发过程中它仍然可以工作,但在生产中是不允许的。认证过程不允许应用程序向localhost发出请求。 我怀疑是后者。在这种情况下,您肯定可以使用xhr请求它。在片段和页面演示中查看我的codeSHOW项目()。另请参见WinJS.xhr演示 编辑-只想包括答案以及。(很棒的应用程序!!) 这将替换jquery中的$.ajax调用
WinJS.xhr({
url: '/menu.html',
responseType: "document",
}).then(function(xhr){
var temp = xhr.response.childNodes[0].innerHTML;
$('#menu').html(temp);
}
);
你说你点击的网址是“本地的”。它是机器上的独立服务还是同一项目中的另一个文件? 如果是前者,那么实际上在开发过程中它仍然可以工作,但在生产中是不允许的。认证过程不允许应用程序向localhost发出请求。 我怀疑是后者。在这种情况下,您肯定可以使用xhr请求它。在片段和页面演示中查看我的codeSHOW项目()。另请参见WinJS.xhr演示 编辑-只想包括答案以及。(很棒的应用程序!!) 这将替换jquery中的$.ajax调用
WinJS.xhr({
url: '/menu.html',
responseType: "document",
}).then(function(xhr){
var temp = xhr.response.childNodes[0].innerHTML;
$('#menu').html(temp);
}
);
你的回答很好,因为它让我明白了事情应该如何运作。但是我更新了我的问题,以反映我应该调用什么函数来从我的url文件中获取数据?我的印象是你知道需要使用什么xhr对象,我不知道哪一个(如果有)会允许IE10中的本地ajax请求。啊,是的,我现在正在研究。不过我很欣赏这种洞察力。谢谢凯文,如果你不介意的话,我补充了一些细节,看看有没有什么东西向你扑来。谢谢你的时间,我很感激。对不起,我没有什么新的补充。可能只是由于安全限制,IE10正确地阻止了本地ajax请求的成功。谷歌Chrome也有同样的限制。你的反应很好,因为它启发了我,让我明白事情应该如何运作。但是我更新了我的问题,以反映我应该调用什么函数来从我的url文件中获取数据?我的印象是你知道需要使用什么xhr对象,我不知道哪一个(如果有)会允许IE10中的本地ajax请求。啊,是的,我现在正在研究。不过我很欣赏这种洞察力。谢谢凯文,如果你不介意的话,我补充了一些细节,看看有没有什么东西向你扑来。谢谢你的时间,我很感激。对不起,我没有什么新的补充。可能只是由于安全限制,IE10正确地阻止了本地ajax请求的成功。Google Chrome也有同样的限制。你是否将目标URL添加到清单中允许的端点列表?你是否将目标URL添加到清单中允许的端点列表?是的,我应该澄清一下,它在同一个项目中。基本上,我有一组HTML文件,它们共享相同的菜单文件,其中包含填充菜单的HTML。所有这些文件(包括HTML文件)都在同一目录中。现在查看你的演示。是的,我应该澄清一下,它在同一个项目中。基本上,我有一组HTML文件,它们共享相同的菜单文件,其中包含填充菜单的HTML。所有这些文件(包括HTML文件)都在同一目录中。现在查看您的演示。
WinJS.xhr({
url: '/menu.html',
responseType: "document",
}).then(function(xhr){
var temp = xhr.response.childNodes[0].innerHTML;
$('#menu').html(temp);
}
);