2011-12-31 43 views

Trả lời

18

Một yêu cầu AJAX là giống hệt một yêu cầu trình duyệt "bình thường" như xa như máy chủ có liên quan khác với các tiêu đề HTTP có khả năng hơi khác nhau. ví dụ. chrome gửi:

X-Requested-With:XMLHttpRequest 

Tôi không chắc chắn nếu tiêu đề đó được chuẩn hay không, hoặc nếu nó khác nhau ở mọi trình duyệt hay thậm chí bao gồm ở tất cả ở mọi trình duyệt.


sửa: Tôi đi mà trở lại, tiêu đề được gửi bởi jQuery (và có khả năng thư viện JS khác), không phải là trình duyệt như là bằng chứng:

var xhr = new XMLHttpRequest(); 
xhr.open('GET', '/'); 
xhr.send(); 

mà gửi:

Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Cookie: .... 
Host:stackoverflow.com 
If-Modified-Since:Sat, 31 Dec 2011 01:57:24 GMT 
Referer:http://stackoverflow.com/questions/8685750/how-does-an-ajax-request-differ-from-a-normal-browser-request/8685758 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11 

dẫn tôi đến kết luận rằng theo mặc định hoàn toàn không có sự khác biệt.

-1

user-agent của bạn, hay còn gọi là trình duyệt, gửi một tiêu đề XHR mà bạn có thể bắt từ php như thế này:

$_SERVER['HTTP_X_REQUESTED_WITH'] 
-1

Không thực sự. Ngoại trừ việc hầu hết khách hàng Ajax gửi một tiêu đề HTTP X-Requested-With=XMLHttpRequest HTTP

21

Có thể có một số khác biệt về tiêu đề, nhưng sự khác biệt về hành vi chính là trên máy khách.

Khi trình duyệt đưa ra yêu cầu thường xuyên như trong window.location.href = "index.html", trình duyệt sẽ xóa cửa sổ hiện tại và tải phản hồi của máy chủ vào cửa sổ.

Với yêu cầu ajax, cửa sổ/tài liệu hiện tại không bị ảnh hưởng và mã javascript có thể kiểm tra kết quả của yêu cầu và làm những gì nó muốn với kết quả đó (chèn HTML động vào trang, phân tích cú pháp JSON và sử dụng trang đó logic, phân tích cú pháp XML, v.v ...).

Máy chủ không làm bất kỳ điều gì khác biệt - đó chỉ là cách khách hàng xử lý phản hồi từ hai yêu cầu.

1

Mặc dù tôi tin rằng các bạn, có điều gì đó hoàn toàn lạ trên weblogic: Tôi đang viết một ứng dụng bằng cách sử dụng khung công tác ExtJS thực hiện cuộc gọi AJAX.

Trong khi làm các j_security_check, tôi luôn nhận được lỗi khi thực hiện điều đó một cách AJAX: WebLogic nói:

unauthorized: var submitButton = new Ext.Button({ 
      text: 'Logon', 
      formBind: true, //only enabled once the form is valid 
      disabled: true, 
      handler: function() {     
       Ext.Ajax.request({ 
        url: "j_security_check", 
        params: { 
         j_username: dlg.getForm().findField('j_username').getValue(), 
         j_password: dlg.getForm().findField('j_password').getValue() 
        }, 
        method: "GET" 
       }); 
      } 
     }); 

này thất bại.

Khi tôi phát hành này:

window.location.href = "j_security_check?j_username=" + dlg.getForm().findField('j_username').getValue() + "&j_password=" + dlg.getForm().findField('j_password').getValue(); 

Nó hoạt động! Kỳ dị.

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