Trong chức năng jQuery ajax có tùy chọn xhr. Có ai đó biết thêm chi tiết, khả năng sử dụng hoặc sử dụng mẫu của tùy chọn này không?Tùy chọn jQuery ajax() - xhr
Trả lời
Trong thực tế, someone does know.
Tùy chọn xhr
cho phép bạn xác định cuộc gọi lại của riêng bạn để tạo đối tượng XMLHttpRequest sẽ được sử dụng sau hậu trường trong cuộc gọi ajax()
. Trong hầu hết mọi trường hợp, bạn không cần phải chỉ định tùy chọn này.
http://api.jquery.com/ là bạn của bạn. Từ trang web đó khi bạn tìm kiếm lệnh ajax():
xhr (Hàm): Gọi lại để tạo đối tượng XMLHttpRequest. Mặc định là ActiveXObject khi có sẵn (IE), XMLHttpRequest nếu không. Ghi đè để cung cấp triển khai của riêng bạn cho XMLHttpRequest hoặc các cải tiến cho factory.It không có sẵn trong jQuery 1.2.6 và trong bất kỳ phiên bản đầu tiên nào.
Nói chung, trừ khi bạn biết mình đang làm gì bạn thực sự sẽ không được sử dụng chức năng này của $ .ajax() chức năng
Vâng, đó là điểm để tìm hiểu sâu hơn trong func này, nơi api không đủ thân thiện. Sujal đã làm rõ. –
Tôi biết đây là một câu hỏi cũ, cũ nhưng tôi chỉ đang tìm kiếm và muốn đăng bài này để người tiếp theo hiểu được những gì đang diễn ra.
Đối với chức năng này, bạn muốn trả lại đối tượng XHR thích hợp cho trình duyệt của mình. Hành vi mặc định là sử dụng XMLHTTPRequest hoặc tương đương với IE. Đây là hành vi mặc định:
jQuery.ajaxSettings.xhr = window.ActiveXObject ?
/* Microsoft failed to properly
* implement the XMLHttpRequest in IE7 (can't request local files),
* so we use the ActiveXObject when it is available
* Additionally XMLHttpRequest can be disabled in IE7/IE8 so
* we need a fallback.
*/
function() {
return !this.isLocal && createStandardXHR() || createActiveXHR();
} :
// For all other browsers, use the standard XMLHttpRequest object
createStandardXHR;
Hai phương pháp tạo createStandardXHR
và createActiveXHR
cơ bản gọi các phương pháp tạo XHR cơ bản tất cả chúng ta đã biết và yêu mến trong nhiều năm. Dưới đây là createStandardXHR:
function createStandardXHR() {
try {
return new window.XMLHttpRequest();
} catch(e) {}
}
Vì vậy, nếu bạn muốn ghi đè này, bạn có thể chỉ cần vượt qua trong chức năng của riêng bạn mà trả về một đối tượng new XMLHttpRequest()
.
Tại sao bạn muốn thực hiện việc này? Giả sử bạn cần tạo một yêu cầu HTTP tên miền chéo và đang sử dụng một IFRAME shim để làm cho nó hoạt động bằng cách sử dụng document.domain
để hoạt động trong cùng một quy tắc gốc. Đây là một cách tốt để làm cho javascript của bạn tải đối tượng XHR từ khung chính xác dựa trên tên miền bạn muốn nói chuyện.
Twitter.com sử dụng kỹ thuật này.
Chạy JavaScript trên http://twitter.com/ nhưng dữ liệu ở số http://api.twitter.com. Họ tạo ra một IFRAME trỏ tại api.twitter.com mà chỉ đơn giản là đặt document.domain
đến "twitter.com"
. Họ cũng đặt document.domain
thành "twitter.com"
trong trang chính.
Sau đó, JS của họ, khi thực hiện yêu cầu HTTP, chỉ cần tạo nó từ IFRAME thay vì trang chính. Đưa họ qua chính sách cùng nguồn gốc.
Bạn có thể thực hiện việc này bằng tùy chọn xhr thành $ .ajax(). Dưới đây là một đoạn (tưởng tượng mã này chạy trên một trang tại http://myapp.com):
$.ajax({url: "http://api.myapp.com", xhr: function(){
return new ($('#my_api_iframe')[0].contentWindow.XMLHttpRequest)();
}, success: function(html) {
// format and output result
}
});
Điều đó sẽ làm việc miễn là cả hai trang chính và các iframe thiết document.domain
của họ để cùng giá trị.(Đây là một ví dụ hackish: nó sẽ không hoạt động trong một số phiên bản IE vì tôi đã lừa và chỉ sử dụng đối tượng XMLHttpRequest chuẩn - bạn sẽ cần phải sửa.)
Hy vọng điều đó sẽ hữu ích.
(chỉnh sửa để thêm: đây là một kỹ thuật cần thiết cho các trình duyệt cũ - Hỗ trợ CORS trong hầu hết các trình duyệt hiện đại sẽ làm cho điều này không cần thiết)
Sujal
cảm ơn bạn đã đăng bài muộn, nó giải thích tốt –
Một câu trả lời muộn, nhưng mã dưới đây là một ví dụ tuyệt vời về những gì bạn có thể làm khi bạn ghi đè tùy chọn xhr. This is taken from Ben Nolan's blog Nó cho phép bạn theo dõi tiến độ của một xhr nhận được. Tôi đã sử dụng điều này để tạo thanh tiến trình khi tải một tập dữ liệu json lớn, chính xác điều mà anh ta đã tạo ra cho nó. Nó đã giúp tôi một tấn.
interval = null
$.ajax {
url : "endpoint.json"
dataType : 'json'
xhr :() =>
xhr = jQuery.ajaxSettings.xhr()
interval = setInterval(=>
if xhr.readyState > 2
total = parseInt(xhr.getResponseHeader('Content-length'))
completed = parseInt(xhr.responseText.length)
percentage = (100.0/total * completed).toFixed(2)
console.log "Completed #{percentage}%"
, 50)
xhr
complete: ->
clearInterval(interval)
success : (data) =>
alert(data)
}
Bất kỳ cơ hội nào bạn có thể cung cấp câu trả lời này trong JavaScript thay vì CoffeeScript? – pydanny
@pydanny xem http://js2coffee.org/ –
- 1. Tùy chọn lỗi JQuery trong $ .ajax Tiện ích
- 2. Jquery lấy dữ liệu về lỗi XHR
- 3. JQuery - Nhiều tùy chọn chọn
- 4. jQuery onchange chọn tùy chọn
- 5. Có thể gửi tiêu đề tùy chỉnh với yêu cầu XHR ("Ajax") không?
- 6. jQuery - chọn tùy chọn trong hộp chọn
- 7. Lỗi cuộc gọi ajax của jQuery ajax
- 8. XHR Level2 với jQuery để tải lên tệp
- 9. Sự kiện jQuery khi chọn tùy chọn
- 10. Chọn tùy chọn tiếp theo với jQuery
- 11. jquery chọn trên khuyết tật tùy chọn
- 12. Tùy chọn jQuery IF được chọn
- 13. JQuery tạo tùy chọn chọn mới
- 14. jQuery xóa các tùy chọn khỏi chọn
- 15. Chọn tùy chọn điền động với jquery
- 16. Sử dụng jQuery chọn một tùy chọn?
- 17. mô phỏng nhấp chuột vào tùy chọn chọn với jquery
- 18. jQuery để điều hướng đến trang trong tùy chọn chọn
- 19. jQuery xác thực - nếu một tùy chọn được chọn làm cho tùy chọn tiếp theo không được yêu cầu?
- 20. Tùy chọn bộ nhớ cache của jQuery .ajax không hoạt động trong Firefox và Chrome?
- 21. Gọi lại lỗi Jquery ajax
- 22. jQuery/Programmatically Chọn một tùy chọn trong hộp chọn
- 23. jQuery $ .removeAttr ("được chọn") thay đổi đã chọn tùy chọn
- 24. ddslick chọn tùy chọn giá trị bài đăng của tùy chọn đã chọn - plugin jquery
- 25. jQuery - nhận tiêu đề phản hồi AJAX
- 26. Xử lý jQuery Ajax 404
- 27. JQuery: Ẩn các tùy chọn của chọn theo tùy chọn giá trị
- 28. Tùy chọn thả xuống thay đổi di động jQuery Chọn tùy chọn và làm mới nó
- 29. jQuery - Plugin tùy chọn mặc định extend()
- 30. tùy chọn có thể kéo jquery
Có, nó trông không hữu ích lắm. –
Khi nghi ngờ, hãy truy cập API trước. –
Thực sự ...? Đây là một nỗ lực khá buồn tại ... [EDIT: Tôi sẽ để lại bình luận của tôi hơi nhiều thông tin bằng cách thêm phần EDIT này]. – SgtPooki