{"id":119,"date":"2010-03-04T21:18:58","date_gmt":"2010-03-04T21:18:58","guid":{"rendered":"https:\/\/blog.ecotronics.ch\/wordpress\/?p=119"},"modified":"2010-06-03T13:55:16","modified_gmt":"2010-06-03T13:55:16","slug":"jquery-ajax-und-encoding","status":"publish","type":"post","link":"https:\/\/blog.ecotronics.ch\/wordpress\/?p=119","title":{"rendered":"JQuery, AJAX und Encoding"},"content":{"rendered":"<p>Schickt man in seiner Webapplikation Formulardaten mit AJAX zum Server, dann kann man b\u00f6se \u00dcberraschungen erleben, insbesondere wenn man meistens mit dem Firefox arbeitet und nur gelegentlich mit dem IE testet.<\/p>\n<p>W\u00e4hrend der Firefox mit UTF-8 pr\u00e4chtig zurechtkommt, muss man beim IE schon mit dem Zweih\u00e4nder dahinter, um seine \u00e4s, \u00f6s und \u00fcs irgendwie auf den Server zu bekommen. Das Problem besteht \u00fcbrigens nicht nur mit AJAX, auch mit GET verschickte Formulare scheinen bei gewissen IE-Versionen und Encodings zu Datenschrott zu f\u00fchren.<\/p>\n<p>Mit JQuery und UTF-8 w\u00e4hnt man sich auf der sicheren Seite, doch das ist leider nur die halbe Wahrheit.<\/p>\n<p>Unsere Versuchsanordnung ist denkbar einfach: Eine Webseite mit Zeichensatz UTF-8, ein Formular mit einem Text-Eingabefeld und einem Submit-Button:<\/p>\n<pre>&lt;%@ page contentType=\"text\/html;<strong>charset=UTF-8<\/strong>\" %&gt;\r\n...\r\n&lt;form method=\"POST\" action=\"remoteHtmlAjaxsearch\"&gt;\r\n  <strong>&lt;input type=\"text\" id=\"ajaxsearch\" \/&gt;<\/strong>&lt;br \/&gt;\r\n  &lt;input type=\"submit\" value=\"Suchen\" id=\"btnSubmit\"\/&gt;\r\n&lt;\/form&gt;<\/pre>\n<p>Ein Klick auf den Button schickt den eingegebenen Wert mit AJAX zum Server.\u00a0 Die Remote-Methode macht nichts anderes, als den \u00fcbergebenen Wert mit einem &lt;p&gt;-Tag zu ummanteln und als HTML zur\u00fcckschicken. Hier die serverseitige Funktion &#8211; nat\u00fcrlich Grails, what else?<\/p>\n<pre>def remoteHtmlAjaxsearch = {\r\n  def html = \"\"\r\n  if (params.ajaxsearch) {\r\n    html = \"&lt;p&gt;$params.ajaxsearch&lt;\/p&gt;\"\r\n  }\r\n  render html\r\n}<\/pre>\n<p>Wenn man bei JQuery zur einfachsten AJAX-Variante greift, n\u00e4mlich JQuery.get, dann ist alles in Butter. Verwendet habe ich \u00fcbrigens Version <strong>1.3.2.<\/strong> Die folgende Variante funktioniert sowohl im IE wie im Firefox:<\/p>\n<pre>$('#btnSubmit').click(function() {\r\n  var ajaxsearchIn = $('#ajaxsearch').attr('value');\r\n  <strong>$.get<\/strong>(\"remoteHtmlAjaxsearch\", {ajaxsearch: ajaxsearchIn}, function(data){\r\n    $(\"#content\").html(data);\r\n  });\r\n  return false;\r\n});<\/pre>\n<p>Diese Methode ist allerdings etwas beschr\u00e4nkt. Wenn man mehr M\u00f6glichkeiten ben\u00f6tigt, dann gibt es <strong>$.ajax.<\/strong> Der folgende Code macht allerdings im IE aus den Umlauten Hackfleisch:<\/p>\n<pre>$('#btnSubmit').click(function() {\r\n  var ajaxsearchIn = $('#ajaxsearch').attr('value');\r\n\r\n  $.ajax({\r\n    url: \"remoteHtmlAjaxsearch\", data: \"ajaxsearch=\" + ajaxsearchIn,\r\n    success: function(html){\r\n      $(\"#content\").html(html);\r\n    }\r\n  });\r\n  return false;\r\n});<\/pre>\n<p>Nur wenn man diesen Code noch mit einem $.ajaxSetup erg\u00e4nzt und dabei die Daten mit POST abschickt, dann klappt es mit allen Zeichen:<\/p>\n<pre>$('#btnSubmit').click(function() {\r\n  var ajaxsearchIn = $('#ajaxsearch').attr('value');\r\n\r\n<span style=\"color: #ff0000;\">  $.ajaxSetup({\r\n    contentType: \"application\/x-www-form-urlencoded;<strong><span style=\"color: #ff0000;\">charset=utf-8<\/span><\/strong>\",\r\n    <strong>type: \"POST\"<\/strong>\r\n  });\r\n<\/span>\r\n  $.ajax({\r\n    url: \"remoteHtmlAjaxsearch\", data: \"ajaxsearch=\" + ajaxsearchIn,\r\n    success: function(html){\r\n      $(\"#content\").html(html);\r\n    }\r\n  });\r\n  return false;\r\n});<\/pre>\n<p>Das Interessante ist, dass die Anwendung von type und contentType innerhalb von $.ajax nicht dasselbe Ergebnis brachte!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Schickt man in seiner Webapplikation Formulardaten mit AJAX zum Server, dann kann man b\u00f6se \u00dcberraschungen erleben, insbesondere wenn man meistens mit dem Firefox arbeitet und nur gelegentlich mit dem IE testet.<\/p>\n<p>W\u00e4hrend der Firefox mit UTF-8 pr\u00e4chtig zurechtkommt, muss man beim IE schon mit dem Zweih\u00e4nder dahinter, um seine \u00e4s, \u00f6s und \u00fcs irgendwie auf [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[34,35,3],"tags":[30,39,42,28,40,41],"_links":{"self":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/119"}],"collection":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=119"}],"version-history":[{"count":10,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/119\/revisions"}],"predecessor-version":[{"id":127,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/119\/revisions\/127"}],"wp:attachment":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}