TAGS :Viewed: 8 - Published at: a few seconds ago

[ enctype = "multipart/form-data" works different between ie9 and chrome ]

I want to post some data to another domain with the enctype equal to multipart/form-data, because I want the unmodified data in the server side. Here is my test code:

<textarea name="txt" rows="20" cols="80">
</textarea>
<script>
function x_domain_post(url, data)
{
    var dd = document.createElement('div');
    var ifrname = "client_proxy";
    dd.innerHTML = "<iframe id='" + ifrname + "' name='" + ifrname + "' width=0 height=0 ></iframe>";
    document.getElementsByTagName('body')[0].appendChild(dd);
    var ifr = document.getElementById(ifrname);

    var f = document.createElement('form');
    f.action = url;
    f.method = "post";
    f.enctype = "multipart/form-data";
    f.target = ifr.name;
    f.innerHTML = f.innerHTML + "<textarea name='request'>default</textarea>";
    document.getElementsByTagName("body")[0].appendChild(f);
    document.getElementsByName("request")[0].value=data;
    f.submit()
    setTimeout(function(){document.getElementsByTagName("body")[0].removeChild(f);}, 1000);
}

</script>
<button onclick="x_domain_post('http://192.168.232.128/add', document.getElementsByName('txt')[0].value)">

The request in chrome is:

...
Content-Type:multipart/form-data; boundary=----WebKitFormBoundary9zCD31eJSHkdb8ul
...
------WebKitFormBoundary9zCD31eJSHkdb8ul
Content-Disposition: form-data; name="request"

a

b

o
------WebKitFormBoundary9zCD31eJSHkdb8ul--

But in IE9:

POST /add HTTP/1.1
...
Content-Type: application/x-www-form-urlencoded
...
request=a%0D%0A%0D%0Ab%0D%0A%0D%0Ao

Any of your help will be appreciated!

Answer 1


Does this help?

http://www.bennadel.com/blog/1273-Setting-Form-EncType-Dynamically-To-Multipart-Form-Data-In-IE-Internet-Explorer-.htm

Apparently in IE, you have to set the "encoding" of the form rather than the "enctype". The good news is, you can set both values without concern and this will take care of the problem