Javascript 在phonegap和Windows Phone 7中使用$.ajax获取静态html文件

Javascript 在phonegap和Windows Phone 7中使用$.ajax获取静态html文件,javascript,windows-phone-7,cordova,requirejs,Javascript,Windows Phone 7,Cordova,Requirejs,我们正在使用Phonegap/Cordova 2.3.0将应用程序部署到Windows Phone 7。应用程序使用Require.js动态加载所有模块。其中一个模块称为“路由器”,负责从本地文件获取静态html并将其内容加载到中。这适用于iPhone、iPad和WindowsPhone8。但是WP7中发生了一些奇怪的事情 来自router.js的示例代码: //path that works with WP8 var path = "www/views/"; $.ajax({ url: pat

我们正在使用Phonegap/Cordova 2.3.0将应用程序部署到Windows Phone 7。应用程序使用Require.js动态加载所有模块。其中一个模块称为“路由器”,负责从本地文件获取静态html并将其内容加载到
中。这适用于iPhone、iPad和WindowsPhone8。但是WP7中发生了一些奇怪的事情

来自
router.js
的示例代码:

//path that works with WP8
var path = "www/views/";
$.ajax({ url: path + "test3.html" })
                .done(function(html) {
                    alert(html); //result from Windows Phone 8
                }).fail(function(error) {
                    alert(error); //result from Windows Phone 7
                });
在WP7上测试时给出的错误是找不到404

我之所以说“发生了一些奇怪的事情”,是因为我可以将上面的代码复制到
main.js
(require.js入口点)或
index.html
,并且它将毫无错误地运行。但是当我将代码放入我的
router.js
时,它返回错误

一些意见:

  • router.js
    main.js
    位于同一文件夹(
    /www/js
  • index.html
    位于
    /www
    文件夹中
  • 我尝试了我能想到的每一种路径组合,希望能偶然发现一种有效的路径组合
    /app/www/views
    app/www/views
    /www/views
    www/views
    /views
    视图
    ,甚至
    x-wmapp0:/app/www/views
    x-wmapp1:/app/www/views
  • 显然,我提供了一个超级简化的示例。如果你需要更多,就告诉我

以下内容可能有助于您理解问题

1) 通过File.cs(\templates\standalone\cordovalib\Commands\File.cs)访问Cordova WP7上的本地文件。因此,您可以附加完整的cordovalib而不是编译的dll,并查看Cordova试图在何处查找该文件


2) ajax请求和本地文件之间的转换是在XHRPatch(cordova-2.3.0.js)上完成的,所以请尝试在某个地方添加uri跟踪(console.log(uri);)

我现在使用的cordova 2.7.0(在Windows Phone 8上-在WP7上可能有所不同!),看起来您只需要引用相对于应用程序根的路径(不是您的
www
目录!这意味着您必须从
www/path/to/my/file.js


希望有帮助-这让我很困惑!

如果您共享示例代码,我可以看一看。我建议1)检查CordovaSourceDictionary.xml中是否存在静态页面2)尝试将静态页面与index.html放在同一文件夹中,并使用“test3.html”作为路径(w/o app/www)
CordovaSourceDictionary.xml
在构建时似乎正在正确更新。文件明确列出(尽管前面有
www/
。我尝试了您的建议,并将
test.html
文件移动到
www/
文件夹中,其中包含索引,但得到了相同的404。这真的很有帮助。我在
File.cs
中放置了一个断点,当我从索引中的js代码加载时,它只命中一次。当路由器中的js代码尝试加载文件时,它不会中断。有趣。然后我尝试了您的建议,将
console.log(uri)
放在打开XHR请求的cordova.js代码中。也很有趣。从索引打开文件时,uri为
test1.html
。当它试图从其他区域打开时,它是
test1.html?u=543456543
。可能就是这样。我正在测试,答对了!我将在这里为子孙后代发布实际问题。问题是jQuery被全局配置为不缓存ajax请求(
{cache:false}
)。因此,它向所有请求追加了65432345(时间戳)以覆盖服务器缓存。这对web URL非常有效,但不适用于从WP7中的文件系统加载文件。