2012-06-06 27 views
5

Tôi hiện đang tạo ứng dụng di động lai (xem phonegap/cordova) cho iOS và Android và nhận thấy khi cập nhật url img.src của hình ảnh (mà tôi thường xuyên làm) Yêu cầu http trên Android trông giống như bên dưới.Thao tác yêu cầu http gây ra bằng cách cập nhật img.src

Vấn đề của tôi là nó không bao gồm tất cả tiêu đề Chấp nhận quan trọng (Chấp nhận: /) để máy chủ không tải hình ảnh và trả về (HTTP/1.1 406 không thể chấp nhận). Chrome/iOS bao gồm tiêu đề Chấp nhận này trong các yêu cầu http của họ khi cập nhật url img.src.

Câu hỏi của tôi là, có cách nào để thêm tiêu đề này hoặc thực hiện nội dung nào đó có thể bao gồm tiêu đề này cho bản cập nhật img.src tiếp theo không?

Android Http Yêu cầu:

GET /system/data/ba9320b8-e093-47a9-8858-c6343febf3ec/frame?t=1339017043002 HTTP/1.1 
Host: MyHostName 
Connection: keep-alive 
User-Agent: Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) 
AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 
Accept-Encoding: gzip,deflate 
Accept-Language: en-US 
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7 
Cookie: auth_token=0882f24f-04d7-4f05-9475-cfe2a94af5bf 
+0

Bạn đã thử tạo một hình ảnh mới, thay vì cập nhật thuộc tính src của ảnh gốc? –

Trả lời

1

Hãy nhìn vào các Google implementation để xử lý vấn đề tương thích cho tất cả các vấn đề như vậy. Đây là từ bên trong Thư viện đóng cửa, tương thích với PhoneGap (ít nhất là họ nói :)

Về cơ bản những gì bạn cần làm là thay đổi tiêu đề của yêu cầu http. Một đối tượng xhr có một phương thức gọi là setRequestHeader (param, value); làm những gì bạn đang tìm kiếm. Sử dụng remote debugging on Android để xem tiêu đề nào đã được gửi và ở đâu.

Tôi không biết bạn đang sử dụng thư viện nào. Thư viện đóng cửa của Google cho phép bạn chuyển các tiêu đề yêu cầu dưới dạng một tham số đối tượng đến phương thức gửi của một cá thể xhr (SEE THIS), vì vậy nó khá dễ dàng. Theo như tôi biết, jQuery cũng có một hành vi tương tự.

$.ajax({ 
     url: "http://someurl", 
     data: { signature: authHeader }, 
     type: "GET", 
     beforeSend: function(xhr){xhr.setRequestHeader('X-Test-Header', 'test-value');} 
     success: function() { alert('Success!' + authHeader); } 
     }); 
Các vấn đề liên quan