使用Phonegap Web应用程序在iOS上对Web的JQuery AJAX调用停止工作

Posted

技术标签:

【中文标题】使用Phonegap Web应用程序在iOS上对Web的JQuery AJAX调用停止工作【英文标题】:JQuery AJAX call to web on iOS stopped working using Phonegap web app 【发布时间】:2013-06-23 22:52:53 【问题描述】:

我有一个用 html5、javascript、css3 编写的应用程序,使用 PhoneGap 为 iosandroid 编译。它收集调查信息并通过 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" '

仍然没有结果。有没有人看到/有类似的问题?有人看到我的错误吗?

【问题讨论】:

【参考方案1】:

对于 iOS,您可能想尝试 &lt;access origin="http://*.mydomain.com" /&gt;,因为 iOS 未在 PhoneGap API 中记录以支持 subdomain 属性。

如果这不能解决您的问题,您可能需要研究 CORS(跨源资源共享)。我在尝试从我的应用程序向 iOS 上的本地端口发出 POST 请求时遇到问题。 W3C 有一个great article on how to enable CORS 可能会有所帮助。我知道在我的情况下,系统会首先尝试执行OPTIONS 请求,如果它不起作用,整个事情都会失败。

Fiddler 是您可能会发现有用的另一个工具(如果不是现在,也可能是将来)。您可以将 iPad 设置为通过桌面进行代理,然后您将能够观察进出设备的所有请求。这就是我找到上述OPTIONS 请求的方式。

【讨论】:

以上是关于使用Phonegap Web应用程序在iOS上对Web的JQuery AJAX调用停止工作的主要内容,如果未能解决你的问题,请参考以下文章

iOS HTML Web App (PhoneGap) 滚动

Cleaver(PhoneGap / Cordova 作为组件)在 iOS 中不起作用

我无法使用 CDVPlugin 从 phonegap 2.7.0 中的 javascript 访问本机 iOS?

维护 PhoneGap 混合/Web 应用程序代码库

使用 jquery mobile 为 iOS 设置 phonegap

我可以在不显示 web 视图的情况下使用 phonegap 吗?