web-dev-qa-db-ja.com

JQuery AJAXは私のサーバーにUTF-8を送信していません。IE

サーバーにUTF-8、日本語のテキストを送信しています。 Firefoxで動作します。私のaccess.logとヘッダーは次のとおりです。

/ajax/?q=%E6%BC%A2%E5%AD%97
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Content-Type    application/x-www-form-urlencoded; charset=UTF-8

ハイヤー、IE8では、私のaccess.logはこう言っています:

/ajax/?q=??

何らかの理由で、IE8がAJAXの呼び出しを疑問符に変えています。なぜですか!?いくつかのチュートリアルに従ってscriptCharsetとContentTypeを追加しましたが、まだうまくいきません。

そしてこれは私のコードです:

$.ajax({
    method:"get",
    url:"/ajax/",
    scriptCharset: "utf-8" ,
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    data:"q="+query ...,
    ...
    })
24
TIMEX

encodeURIComponent()でクエリパラメータをエンコードしてみてください

data:"q="+encodeURIComponent( query )

彼のコメントでボビンスが非常に正確に指摘しているように、オブジェクト表記を使用してパラメーターをajaxメソッドに渡すと、エンコード自体を処理します。

そう

data:{ q : query }

jQueryにエンコーディングを処理させます。

54

私が遭遇した問題を解決し、それがutf8変換に関係していることを期待して、この投稿を読みました。

私の場合、サーバーエンジン(node.js)がデータのContent-lengthを計算し、データがutf8ではなくrawであると見なしたため、uft8の2文字の拡張文字は、1つの文字が結果として得られるかのように計算されましたサーバーでは1文字が少なすぎます。

ここでそれを解決するために私がしたことを見てください: CouchDBに送信するときに整形式のJsonではありません

2
javabeangrinder

これは古い投稿であることはわかっていますが、最近この問題が発生したため、他の誰かが同じ問題を抱えている場合に備えて貢献したいと思います。私はPHPを使用していますが、すべてのサーバーサイド言語にオプションがあると確信しています。それはいくつかのことでした:

  1. Header( 'Content-Type:text/html; charset = utf-8');を追加して、ajax応答で正しいヘッダーを送信していることを確認してください。これは最初の行でなければなりません。ヘッダーがすでに送信されているなどのエラーが発生した場合は、コードのどこかにヘッダーを送信する前に余分なスペースまたは何かを出力しているため、コードを確認してください。

  2. サーバーで応答を作成するときは、echo htmlentities($ your-string、null、 'utf-8);を使用して、すべての文字を対応するHTML文字に変換してください。 IEにutf-8データを送信していると伝えた後でも、IEはそれを忘れるか、単に何も想定していないため、これをあなたのコードは正しい出力を保証します。

ご協力ありがとうございます。

1
Alfonso

JavaScriptでencodeURIComponent()を使用します。これがサンプルです:

function doPost()
{
    var URL = "http://localhost/check.php?yab=" + encodeURIComponent(document.getElementById("formSearch").childNodes[1].value);
    xmlHttp.open("GET", URL);
    xmlHttp.send();
};
0
ali.b.y