2009-07-17 9 views
72

と受け入れHTTPヘッダーを設定することはできません私はこのjqueryのコードで「text/xmlで」に同意するHTTPヘッダーを設定しようとしている:Firefoxでが適切にjQueryの

$.ajax({ 
    beforeSend: function(req) { 
     req.setRequestHeader("Accept", "text/xml"); 
    }, 
    type: "GET", 
    url: "[proper url]", 
    contentType: "text/plain; charset=utf-8", 
    dataType: ($.browser.msie) ? "text" : "xml", 
    username: '---', 
    password: '-------',         
    success: function(data) { 
     var xml; 
     if (typeof data == "string") { 
      alert("Data is string:" + data); 
      xml = new ActiveXObject("Microsoft.XMLDOM"); 
      xml.async = false; 
      xml.loadXML(data); 
     } else { 
      xml = data; 
      alert("Data is not string:" + $(xml).text()); 
     } 
     // Returned data available in object "xml" 
     //alert("Status is: " + xml.statusText); 
     $("#ingest_history").html($(xml).text()); 
    }    
}); 

それは素晴らしい作品。

しかし、IEではAcceptヘッダーに設定しようとしている値が末尾に追加されているように見えるので、Accept: */*, text/xmlとなります。これは私のajax呼び出しが私が望むxmlバージョンではなく、HTMLバージョンを返すようになります。

IE 8でAcceptヘッダーを適切に設定/クリアする方法を知っている人はいますか?

更新:何らかの理由で、アスタリスクが表示されませんでした。 IEのAccept Headerは、Accept: */*, text/xmlのように見えます。

答えて

0

IE(任意のバージョン)がAcceptヘッダーでうまくいくとは思わない。このリンクを参照してください:[http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx]

可能な解決策は、IEであるかどうかを確認することです。そうであれば、text/xmlの存在を確認してください。

Good Luck!

編集:リンク上

中にエラー。私の勘では、ちょうど/後に所望のMIMEタイプを追加しIEは常に/を追加し、ヘッダを受け入れる設定されていました。

+0

/は追加されません。質問 –

+0

ええ、私はそれが私が – BStruthers

2

私は元のポスターがこのリンクを参照している可能性があります:http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspxしかし、これはあなたが見る動作を説明していません。

IEはそれ自身では、あなたが記述している振る舞いを持っておらず、XMLHTTPRequestを使ってAcceptヘッダーを設定すると正しく動作するはずです。私は確認するためにIE8でテストしました。

ご使用のバージョンのjQueryに問題がある可能性があります。あるいは、トラフィックを管理するプラグインがありますか?

8

問題はここに記載されているようです:http://www.grauw.nl/blog/entry/470問題は、XMLHttpRequest specificationは現在、ユーザーエージェントがデフォルトでAcceptヘッダーを設定してreq.setRequestHeader()が新しいAcceptを追加できるだけであることを示しているということです。残念ながら、ブラウザはまだこれに固執していません。問題の書き方は、ブラウザが正しく動作するかどうかをテストすることができます。残念ながら、IE7、Chrome、Safari、Firefox、Operaはすべて失敗します。

ローレンスGrauwもまずここに役立つかもしれない

setRequestHeader('Accept', '') 

または

setRequestHeader('Accept', null) 

これらにAcceptヘッダーをゼロしようとしているの影響について語っています。

醜いサーバーサイドのハッキング:サーバー側のアプリケーションをコントロールしている場合は、常にXMLを返すように固定することができます。「application/i-really-want-xml」などのカスタムメディアタイプをサポートします。 "X-Accept"のようなカスタムHTTPヘッダーのサポートを追加します。

+0

setRequestHeader(「受け入れる」、NULL)と同じことに直面した...書式設定の問題だった考え出しで\ */\ * の書式の問題 はで「型の不一致」を与える:それは実際に追加されますIE8 ""に設定すると最初に動作します! 1.11.1- '\t \t源から – mplungjan

68

また、IEだけでなく、jQuery 1.6.2を使用しているChromeやSafariでも問題がありました。このソリューションは、私が試したすべてのブラウザ(Chrome、Safari、IE、Firefox)で意図したとおりに動作するようです。

これでも問題が解決しない場合は、お試しください。あなたはあなたがこのような何か行うことができますdataTypeあたりのヘッダを受け入れる設定することができ1.5+のjQueryを使用して

24

:ドキュメントは、それが行われる必要があると述べどのようにこのありえないが、

$.ajax({ 
    dataType: ($.browser.msie) ? "text" : "xml", 
    accepts: { 
     xml: "text/xml", 
     text: "text/xml" 
    } 
}); 
+0

は受け入れ:{ \t \t \t "*":allTypes、 \t \t \tテキスト: "text/plainの"、 \t \t \t HTML: "テキスト/ HTML"、 \t \t \tのxml: "アプリケーション/ XML、text/xmlで"、 \t \t \t JSON: "アプリケーション/ JSON、テキスト/ javascriptの" \t \t}」 – nicodemus13

+0

したがって、これらが期待されている受け入れています上記のようにdataTypeも設定する必要があります。 – nicodemus13

1

は、それは私のために働いていたものです。

jQuery.ajax({ 
    type: "POST", 
    url: "...", 
    data: ..., 
    contentType: "text/xml", 
    beforeSend: function(req) { 
    req.setRequestHeader("Accept", "text/xml"); 
    }, ...});