1

我有一个关于将 iOS/Android 应用程序移植到 Win8 的问题。我目前正在使用带有 ajax 调用的http://srobbin.github.com/jquery-pageslide/ 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); //<-------------------
                    }

我做了一些研究,似乎 Windows 8 不允许本地 ajax 调用。如何将其转换为 WinJS.xhr 调用或可在 Win8 上运行的东西?

编辑 - 第一次回答后。

我要做的是转到$str(这是带有html 菜单的文件的url,即menu.html)并通过html 调用用它填充$('#menu')。我在 XHR 返回中放入什么以从 menu.html 中获取文本,然后在成功调用时我可以将其分配给文件。

我第一次搞乱 XHR/AJAX 所以请原谅任何无知。

编辑#2

我已重做 jquery 调用以使用 WinJS.xhr...,如下面的代码所示。

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

4

2 回答 2

1

你说你点击的 URL 是“本地的”。它是机器上的单独服务还是同一项目中的另一个文件?如果是前者,那么实际上它在您开发时仍然可以工作,但在生产中将被禁止。认证过程不允许应用程序向 localhost 发出请求。我怀疑是后者。在这种情况下,您绝对应该能够使用 xhr 请求它。在 Fragments and Pages 演示中查看我的 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);
    }

    );
于 2013-01-11T11:43:50.813 回答
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);
    }
});
于 2013-01-10T20:45:55.147 回答