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

时间:2013-01-10 20:37:48

标签: javascript jquery ajax winjs

我有一个关于将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错误,这是不言自明的。我不知道现在该尝试什么。有人有解决方案吗?

2 个答案:

答案 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);
    }
});