Javascript 如何将jquery ajax调用转换为WinJS.xhr或等效的Win8

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

我有一个关于将iOS/Android应用程序移植到Win8的问题。我目前正在使用一个带有ajax调用的pageslide的修改版本来加载旁边的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); //<-------------------
                    }
这仍然返回访问被拒绝异常。在这段基础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);
    }

    );