2012-04-16 26 views
11

Tôi đã phát triển một ứng dụng iPhone/Android với jQuery mobile & Phonegap (nay là Cordova). Ứng dụng này sử dụng các dịch vụ khác nhau mà không có vấn đề gì. Một trong những dịch vụ này là một trong những Soap vì vậy tôi sử dụng jsSOAPClient (jquery.jqSOAPClient.js) cho jQuery để yêu cầu dịch vụ. Tôi không có vấn đề gì cả từ thiết bị iOS nhưng truy vấn luôn thất bại trên Android.Truy vấn xà phòng với jQuery/Phonegap luôn thất bại trên Android

Trong jsSOAPClient yêu cầu trông như thế:

 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); 
      } 
     }); 

Các "getResponse" "tình trạng" giá trị là "lỗi" và "SOAPClient.Status" (tương đương với "xData.status") giá trị là " 0 ".

Máy chủ có vẻ không nhận được yêu cầu nào cả ...

Tôi lặp lại mã giống với cùng một yêu cầu có kết quả trên iOS.

Cảm ơn bạn đã trợ giúp.

/ EDIT */ Tôi cố gắng để bình luận dòng:

//type: "POST", 

có vẻ như để làm việc, tôi có nghĩa là tôi có một mã trạng thái 200 trong trường hợp này thậm chí nếu tôi có một lỗi phân tích cú pháp do định dạng phản hồi không mong muốn.

+0

Tôi có cùng một vấn đề, do đó, tôi cung cấp tiền thưởng. Tôi có một số thông tin bổ sung. Tôi đã yêu cầu quản trị viên mạng sử dụng wireshark để xem các gói giữa điện thoại và máy chủ. Dưới đây là những gì anh ta quan sát: –

+0

"TLSv1 dường như đang hủy bỏ với một cảnh báo được mã hóa được máy chủ xác nhận. Có các gói FIN theo sau là một thiết lập lại (RST). Điều này giống như một cái bắt tay thất bại tại máy khách ở đuôi kết thúc quá trình đàm phán. " Tôi đã xem một thông báo và thấy điều này: "Lớp bản ghi TLSv1: Cảnh báo được mã hóa; Loại nội dung: Cảnh báo (21); Phiên bản TLS 1.0 (0x0301); Độ dài 24; Thông báo cảnh báo: Cảnh báo được mã hóa". Giống như OP, tôi chỉ gặp sự cố trên Android. –

+1

Dưới đây là hai liên kết của những người nhìn thấy cùng một điều chúng tôi đang ở trong wireshark: http: //code.google.com/p/android/issues/detail? Id = 8334 và http://groups.google.com/group/android - bảo mật-thảo luận/cây/browse_frm/tháng/2010-05? _done =% 2Fgroup% 2Fandroid-security-thảo luận% 2Fbrowse_frm% 2Fmonth% 2F2010-05% 3F & –

Trả lời

1

Dường như có lỗi trong Android 2.x khi đặt tiêu đề "Độ dài nội dung" gây ra sự cố bạn mô tả. Có vẻ như lỗi đã được sửa trong Android 4.0.3. Vì vậy, hãy thử mã của bạn chưa sửa đổi trong trình giả lập 4.0.3 và nó sẽ hoạt động sau đó quay lại 2.x và loại bỏ tiêu đề Độ dài nội dung để xem nó có hoạt động không.

Các vấn đề liên quan