Ajax调用无法访问Windows Phone 8和Cordova 2.3.0rc2中的本地文件

时间:2012-12-28 14:27:05

标签: javascript ajax cordova windows-phone-8

我有一个内置PhoneGap的WebApp。 我看过this文章 所以我尝试将我的应用程序移植到Windows Phone 8并遵循入门指南here

我正在使用Marionette.js和Cordova 2.3.0rc2。我在这里有一个ajax电话。

 $.ajax({
    url : urlTemp + templateId + ".html",  //This refers to a file in my local file system
    data : {},
    success : function(data) {
      App.templates[templateId] = data;
      callback.call(this, data);
    },
    error : function(err) {
      alert('ERROR LOG: Error loading Template for: ' + urlTemp + templateId + ".html");
    },
    dataType : 'text'
  });

不知怎的,这总是错误的。这在Android和IOS中运行良好。

3 个答案:

答案 0 :(得分:2)

尝试在路径前添加x-wmapp0://www/到本地文件。就我而言,它有所帮助。

答案 1 :(得分:1)

如果它只是一个本地文件,您可以使用FileReader API而不是AJAX请求来读取文件数据。

http://docs.phonegap.com/en/2.2.0/cordova_file_file.md.html#FileReader

编辑:刚刚注意到你说你使用的是2.3.0。删除我对2.2中的评论不支持。

答案 2 :(得分:0)

正如WP8中的其他帖子所建议的,当调用ajax时,本地文件的路径必须是绝对的。 所以你需要在你的路径中有“www /”。而不是调用“test.html”,你必须调用“www / test.html”才能使ajax调用工作。

我想出了以下解决方案:

1)首先需要安装“设备插件”才能在WP上执行此代码

2)然后我们只需在每个本地路径之前添加“www /”,每次进行ajax调用时

仅当所有调用的本地文件都在根“www”文件夹中

时才有效

如果您使用jquery mobile并将某些html文件存储在子文件夹中,此代码将使这些文件无法访问,因此您必须对其进行调整

必须在phonegap(和jquery mobile)初始化后执行以下代码:

if (typeof device !== "undefined") {    
    PLATFORM = device.platform.toLowerCase();
    if (PLATFORM == 'win32nt' || PLATFORM == 'wince') {         
        $(document).ajaxSend(function (event, jqxhr, settings) {
            if (settings.url.indexOf("http") !== 0) {
                var parts = settings.url.split("/");
                settings.url = "www/" + parts[parts.length - 1];
            }           
        });         
    }
}