2011-12-31 15 views
25

AJAXリクエストと直接ブラウザリクエスト(Webページの呼び出し方法およびロード方法)に違いはありますか?AJAXリクエストと通常のブラウザリクエストとの違い

言い換えれば、私は、クライアント側要求(ブラウザによって開始される)とは異なる方法で直接処理されるサーバー側要求を意味しますか?

答えて

18

AJAX要求は限り「正常な」ブラウザ要求へ同じですサーバーは、潜在的にわずかに異なるHTTPヘッダー以外に関係しています。例えばクロームは、送信:

X-Requested-With:XMLHttpRequest 

は、私はそのヘッダが標準化されているかどうかわからない、またはそれはすべてのブラウザで異なるのですかさえすべてのブラウザ内のすべてのでが含まれている場合。


編集:送信

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

:によって証明されるように私は、そのヘッダが、jQueryの(そしておそらく他のJSライブラリ)でないブラウザに送信されたバックを取る

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 

私が結論に導くのは、デフォルトでには全く違いはありません。

-1

あなたのユーザーエージェント、別名ブラウザは、あなたがこのようなPHPからキャッチすることができますXHRヘッダを送信します。

$_SERVER['HTTP_X_REQUESTED_WITH'] 
-1

ほとんどのAjaxクライアントがX-Requested-With=XMLHttpRequest HTTPヘッダーを送信する以外は

21

ヘッダーの相違はありますが、主な動作の違いはクライアント上にある可能性があります。

ブラウザがwindow.location.href = "index.html"のように通常の要求を行うと、現在のウィンドウをクリアして、ウィンドウにサーバーの応答を読み込みます。

ajaxリクエストでは、現在のウィンドウ/ドキュメントは影響を受けず、javascriptコードはリクエストの結果を調べて、その結果(HTMLをページに動的に挿入し、JSONを解析してページを使用します)ロジック、パースXMLなど)。

サーバーは何も変わりません。クライアントが2つの要求からの応答をどのように処理するかだけです。

1

私は皆さんのことを信じていますが、weblogicにはまったく奇妙なものがあります。 AJAX呼び出しを行うExtJSフレームワークを使用してアプリケーションを作成しています。 j_security_checkをしながら、それをAJAXの道を行っているとき、私は常にエラーが出

:WebLogicのは言う:

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

これが失敗しました。

私は、この発行する場合:

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

をそれは働きます!奇妙な。

関連する問題