FORMプラグインでファイルアップロードしてレスポンスをJSONで受け取る

レスポンスに次のようなjsonが返ってくるとする。

{"header":{"message":"successful","status":"0"}}

ajaxSubmit()でファイルをアップロードするとiframeを使うので、レスポンスのContent-typeがapplication/jsonだとjsonのファイルをダウンロードしようとしてしまい上手く動かない。
なのでレスポンスをtext/plainにしてやると動いた。
が、FFでは動くんだけどIEだと動かない。

$('#form1').ajaxSubmit({
    dataType:'json',
    success:function(data){
        alert(data.header.message);//
    }
});    

そこで、少々強引だがContent-typeをtext/htmlレスポンスして処理することにした。
※text/htmlだとダブルクオートのエスケープシーケンスがダブルクオートとして読み込まれてしまいパースできなくなる

dataTypeをjsonではなく、xmlとして処理すればうまくいく。

$('#form1').ajaxSubmit({
    dataType:'xml',
    success:function(data){
        var jsonText = $('body', data).text();
        var json = $.parseJSON(jsonText);
        alert(json.header.message);
    }
});

iframeには次のようなhtmlが出力されるのでxmlとして解析してやればおk

<head></head><body>{"header":{"message":"successful","status":"0"}}</body>

本来なら、ファイルアップロードはその他のフォームデータとは別に処理するようにして、レスポンスをjson以外にしてやればいいことなのかもしれないけど、面倒なのでこの方法でとりあえずは良しとしよう。
動いてるし。