Javascript 在phonegap和Windows Phone 7中使用$.ajax获取静态html文件
我们正在使用Phonegap/Cordova 2.3.0将应用程序部署到Windows Phone 7。应用程序使用Require.js动态加载所有模块。其中一个模块称为“路由器”,负责从本地文件获取静态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
中。这适用于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
- 显然,我提供了一个超级简化的示例。如果你需要更多,就告诉我
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中的文件系统加载文件。