it-swarm.com.de

JQuery AJAX sendet kein UTF-8 an meinen Server, nur in IE

Ich sende UTF-8 (japanischer Text) an meinen Server ... __ Es funktioniert in Firefox. Meine access.log und Header sind:

/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

In IE8, mein access.log sagt jedoch:

/ajax/?q=??

Aus irgendeinem Grund verwandelt der IE8 meinen AJAX - Aufruf in Fragezeichen. Warum!? Ich habe das SkriptCharset und ContentType gemäß einigen Tutorials hinzugefügt, aber immer noch kein Glück.

Und das ist mein Code:

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

Versuchen Sie, den Abfrageparameter mit encodeURIComponent() zu codieren.

data:"q="+encodeURIComponent( query )

wenn Sie in seinem Kommentar sehr genau darauf hingewiesen haben, wird die Kodierung selbst mit der Objektnotation an die ajax-Methode übergeben.

so 

data:{ q : query }

jQuery wird die Kodierung handhaben lassen ..

55

Ich habe diesen Beitrag gelesen und gehofft, er würde das Problem lösen, das mir begegnet ist, und das hatte mit Utf8-Konvertierungen zu tun.

In meinem Fall stellte sich heraus, dass die Server-Engine (node.js) die Content-Länge der Daten mit den als roh und nicht als utf8 betrachteten Daten berechnet. Daher wurden zwei erweiterte Zeichen in uft8 so berechnet, als würden sie ein Zeichen ergeben im Server ein Zeichen zu wenig senden.

Sehen Sie hier, was ich getan habe, um das Problem zu lösen: Nicht gut ausgebildeter Json beim Senden an CouchDB

2
javabeangrinder

Ich weiß, dass dies ein alter Beitrag ist, aber ich hatte dieses Problem in letzter Zeit, und ich möchte gerne etwas beitragen, falls jemand anderes das gleiche Problem hat ... Ich benutze PHP, aber ich bin sicher, dass es eine Option gibt auf jeder serverseitigen Sprache. Es waren nur ein paar Dinge:

  1. Vergewissern Sie sich, dass Sie die richtigen Header für Ihre Ajax-Antwort senden, indem Sie Header hinzufügen ('Content-Type: text/html; charset = utf-8'). Dies muss Ihre erste Zeile sein. Wenn Sie Fehler haben, die besagen, dass Header bereits gesendet wurden oder etwas Ähnliches, weil Sie irgendwo in Ihrem Code ein zusätzliches Leerzeichen oder etwas anderes ausgeben, bevor Sie den Header senden, überprüfen Sie Ihren Code.

  2. Wenn Sie Ihre Antwort auf Ihrem Server erstellen, stellen Sie sicher, dass Sie alle Zeichen mit echo htmlentities in das entsprechende HTML-Zeichen konvertieren ($ your-string, null, 'utf-8); Selbst nachdem Sie IE mitgeteilt haben, dass Sie utf-8-Daten senden, scheint es, als würde IE das vergessen oder es wird nicht einfach davon ausgegangen, dass das Hinzufügen des Codes zu Ihrem Code die richtige Ausgabe gewährleistet.

Vielen Dank für Ihre Hilfe.

1
Alfonso

Verwenden Sie encodeURIComponent() in JavaScript. Hier ist die Probe:

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