使用 jQuery / Phonegap 的肥皂查询在 Android 上总是失败

Posted

技术标签:

【中文标题】使用 jQuery / Phonegap 的肥皂查询在 Android 上总是失败【英文标题】:Soap query with jQuery / Phonegap always fail on Android 【发布时间】:2012-04-27 22:50:31 【问题描述】:

我使用 jQuery mobile 和 Phonegap(现在的 Cordova)开发了一个 iPhone/android 应用程序。这个应用程序使用不同的服务没有问题。其中一项服务是 Soap 服务,因此我使用 jQuery 的 jsSOAPClient (jquery.jqSOAPClient.js) 来请求服务。我在 ios 设备上完全没有问题,但在 Android 上查询总是失败。

在 jsSOAPClient 中,请求如下所示:

        function getResponse(xData, status) 
            if(!!callback) 
                SOAPClient.Status = xData.status;
                SOAPClient.ResponseText = xData.responseText;
                SOAPClient.ResponseXML = xData.responseXML;
                callback(xData.responseXML);
            
        

        $.ajax(
             type: "POST",
             url: SOAPClient.Proxy,
             dataType: "xml",
             processData: false,
             data: content,
             complete: getResponse,
             beforeSend: function(req) 
                req.setRequestHeader("Method", "POST");
                req.setRequestHeader("Content-Length", SOAPClient.ContentLength);
                req.setRequestHeader("Content-Type", SOAPClient.ContentType + "; charset=\"" + SOAPClient.CharSet + "\"");
                req.setRequestHeader("SOAPServer", SOAPClient.SOAPServer);
                req.setRequestHeader("SOAPAction", soapReq.Action);
             
        );

“getResponse”“status”值为“error”,“SOAPClient.Status”(等于“xData.status”)值为“0”。

服务器似乎根本没有收到请求...

我再说一遍,同样的代码,同样的请求数据,在 iOS 上也有结果。

感谢您的帮助。

/ 编辑 */ 我试图评论这一行:

//type: "POST",

它似乎有效,我的意思是在这种情况下我有一个 200 状态代码,即使我由于意外的响应格式而出现解析错误。

【问题讨论】:

我有同样的问题,因此,我提供赏金。我有一些额外的信息。我要求网络管理员使用wireshark 来查看电话和服务器之间的数据包。这是他观察到的: "TLSv1 似乎正在中止,并出现服务器确认的加密警报。有 FIN 数据包,然后是重置 (RST)。这看起来像在客户端的握手失败谈判进程的尾声。”我查看了一条消息并看到:“TLSv1 记录层:加密警报;内容类型:警报 (21);版本 TLS 1.0 (0x0301);长度 24;警报消息:加密警报”。就像 OP 一样,我只是在 Android 上遇到问题。 这里有两个人在wireshark中看到同样的东西的链接:code.google.com/p/android/issues/detail?id=8334和groups.google.com/group/android-security-discuss/tree/… 只是为了确保:您的代理与您的 JS 在同一个域上运行? 【参考方案1】:

显然在 Android 2.x 中存在一个错误,其中设置 “内容长度”标头会导致您描述的问题。看起来像 该错误已在 Android 4.0.3 中修复。因此,请尝试未修改的代码 在 4.0.3 模拟器中,它应该可以工作,然后回到 2.x 和 删除 Content-length 标头,看看它是否也能正常工作。

【讨论】:

以上是关于使用 jQuery / Phonegap 的肥皂查询在 Android 上总是失败的主要内容,如果未能解决你的问题,请参考以下文章

phonegap 2.2 + jQuery + Mapkit 插件

phonegap+jquery 手机获取位置

使用 Ajax / JQuery / PhoneGap 重定向

导航Jquery Mobile + PhoneGap

一起使用 JQuery-Mobile/Phonegap 的正确方法?

使用 jquery 在 phonegap 应用程序中管理 cookie 的位置?