我正在使用 PhoneGap 开发移动应用程序,并且必须 从另一个项目 访问某些 服务 。我正在使用 jquery-2.0.0.js 和 jquery-mobile-1.3.2.js 。
$.ajax({ url: 'http://localhost:62465/api/account?email=johndoe@yahoo.com', dataType: 'json', success: function (data) { alert(data.Name); }, error: function (xhr, type) { alert("Failed to load data"); alert(xhr + " " + type); } });
这个ajax调用每次都会失败。在 config.xml中, 我有以下几行:<access origin="*" />
<access origin="*" />
我可能在哪里错了!
问题在于您的phonegap应用程序正在从非网络服务器请求本地文件。本地文件交付时没有HTTP头-这意味着没有“ 200 OK”头,也没有“ 404 Not Found”错误。因此,假定状态码为0。
直接的javascript XHR将需要忽略状态并在readystate == 4(完成并准备就绪)上执行操作。像这样:
var myrequest = new XMLHttpRequest(); myrequest.open('GET','localfile.html'); myrequest.onreadystatechange = function(){ if(myrequest.readyState == 4) { var result = myrequest.responseText; } } myrequest.send();
在MooTools中,在Request类中实现更改后的状态测试是一项相对简单的任务-将返回码测试更改为也接受0表示为true。像这样:
Request.implement({ isSuccess: function(){ var status = this.status; return ((status >= 200 && status < 300) || status === 0); } });
jQuery ....关于jQuery,我想谈一谈-但我会坚持,因为这似乎是一个优雅的地方。
要为状态== 0准备jQuery,您需要使用always事件而不是success事件,您可以在那里测试状态代码。
$.ajax({ url: '/echo/html/', type: 'PUT', data: "email=a@b.com" }).always(function(data, textStatus, jqXHR){ switch(textStatus) { case 200: case 0: alert('Success.'); break; case 404: alert('oops'); break; } });
Cordova / Phonegap中的Ajax-是的!