我有一个用HTML5,Javascript,css3编写的应用程序,使用PhoneGap为iOS和Android编译。它收集调查信息并通过Ajax调用将其上传到在线主机。它一直运作良好,直到最近上传代码似乎停止工作。好不好!在iPad上它表示成功但实际上没有任何东西可以用于主机。这非常奇怪。我试过根据这里的文章重写Ajax调用,但没有运气。
iOS - 6.1.3,PhoneGAP 2.7.0,PhoneGap / Adobe Build使用。
这是上传篇...
function sendToWeb(){
var errorflag = false;
db.transaction(function (tx) {
tx.executeSql("SELECT weburl FROM settings", [], function(tx, results){
var webURL = results.rows.item(0).weburl;
tx.executeSql("SELECT * FROM surveypretransfer WHERE uploaded = '0'",[], function(tx, results){
if (results.rows.length == 0) {
alert("You have no surveys waiting to upload");
} else {
alert("You have " + results.rows.length + " surveys waiting to upload");
for (var i=0; i < results.rows.length; i++) {
var responseURL = webURL + "/feeds/saveinfo.php";
var responseString = results.rows.item(i).responsestring;
var localid = results.rows.item(i).id;
//alert(localid);
$.ajax({
type: 'POST',
data: responseString,
url: responseURL,
timeout: 30000,
success: function(data) {
alert('Success!' + data.join('\n'));
},
error: function(data) {
alert(data.join('\n'));
console.log("Results: " + localid);
alert("Error during Upload. Error is: "+ data.statusText);
}
}); //ajax
}; //for loop
alert("You have successfully uploaded "+ results.rows.length + " survey results");
tx.executeSql("UPDATE surveypretransfer SET uploaded = '1' WHERE uploaded = '0'");
}; //if statement
}); //tx.execute
});
}, errorCB);
}
在iPad上加载时,这两个警报都不会触发。在Android上运行良好,以前曾在iPad上工作,所以我找不到发生了什么变化。
更新:似乎这仅适用于仅限WiFi的iPad。我测试的所有3G都很好。想一想!
Config.XML contains app id = "com.mydomain.myapp" (as an example)
URL for upload is "http://customer.mydomain.com/feeds/saveinfo.php?..."
Also added line 'access origin="http://mydomain.com" subdomains="true" '
仍然没有结果。是否有人看到/有类似的问题?有人看到我的错误吗?
答案 0 :(得分:0)
对于iOS,您可能需要尝试<access origin="http://*.mydomain.com" />
,因为PhoneGap API中未记录iOS以支持subdomain
属性。
如果这不能解决您的问题,您可能需要查看CORS(跨源资源共享)。我在尝试从我的应用程序向iOS上的本地端口发出POST
请求时遇到问题。 W3C有great article on how to enable CORS可能会有所帮助。我知道在我的情况下,系统会首先尝试执行OPTIONS
请求,如果它不起作用,整个事情就会失败。
您可能会觉得有用的另一个工具(如果不是现在,将来)是Fiddler。您可以将iPad设置为通过桌面进行代理,然后您将能够观察进出设备的所有请求。这就是我找到上述OPTIONS
请求的方式。