2011-11-22 47 views
6

tôi gặp sự cố với cuộc gọi bài http trong firefox. Tôi biết rằng khi có một nguồn gốc chéo, firefox đầu tiên làm một OPTIONS trước POST để biết các tiêu đề cho phép truy cập-kiểm soát. Với mã này tôi không có bất kỳ vấn đề:yêu cầu đăng http có nguồn gốc chéo trong javascript

Net.requestSpeech.prototype.post = function(url, data) { 
    if(this.xhr != null) { 
     this.xhr.open("POST", url); 
     this.xhr.onreadystatechange = Net.requestSpeech.eventFunction; 
     this.xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
     this.xhr.send(data); 
    } 
} 

tôi kiểm tra mã này với một html đơn giản mà gọi chức năng này. Mọi thứ đều ổn và tôi có phản hồi của OPTIONS và POST, và tôi xử lý câu trả lời. Nhưng, tôi đang cố gắng tích hợp mã này với một ứng dụng tồn tại với jquery sử dụng (tôi không biết nếu đây là một vấn đề), khi gửi (dữ liệu) thực hiện trong trường hợp này, trình duyệt (firefox) làm như vậy, đầu tiên làm một yêu cầu OPTION, nhưng trong trường hợp này không nhận được phản hồi của máy chủ và đặt thông điệp này trong giao diện điều khiển:

[18:48:13.529] OPTIONS http://localhost:8111/ [undefined 31ms] 

undefined ... các không xác định là bởi vì không nhận được phản hồi, nhưng mã là như nhau, i không biết tại sao trong trường hợp này tùy chọn không nhận được phản hồi, ai đó có ý tưởng?

tôi gỡ lỗi ứng dụng máy chủ của mình và OPTIONS được gửi đến máy chủ, nhưng có vẻ như trình duyệt không chờ phản hồi.

chỉnh sửa sau: ok tôi nghĩ rằng vấn đề là khi tôi chạy với một html đơn giản với thẻ SCRIPT gọi phương thức làm yêu cầu chạy ok, nhưng trong ứng dụng này không nhận được phản hồi, tôi có hình thức mà làm một sự kiện onsubmit, tôi nghĩ rằng sự kiện gửi trở lại rất nhanh và trình duyệt không có thời gian để có được yêu cầu OPTIONS.

chỉnh sửa sau hơn sau này: WTF, tôi giải quyết vấn đề thực hiện yêu cầu POST để đồng bộ hóa:

this.xhr.open("POST", url, false); 

Gửi phản ứng rất nhanh chóng và không thể chờ đợi để đáp ứng OPTION của trình duyệt, bất kỳ ý tưởng điều này?

Trả lời

2

Do chính sách gốc tương tự, bạn không thể gửi bài đăng gốc, bạn có thể giải quyết vấn đề này bằng cách đưa các trang web vào iframe (nếu có quyền truy cập vào miền) trang gốc chứa iframe vào trang bên ngoài. là hợp pháp.

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