39

filejQuery.Formプラグインを介してフィールドを含むフォームを送信しようとしています。コードは次のとおりです。

$('form').ajaxSubmit({
  url: "/path",
  dataType: "json",
  contentType: "multipart/form-data"
...

次に、サーバーは応答としてjsonを返します。応答をファイルとしてダウンロードしようとするIEを除くすべてのブラウザーでうまく機能します。フォームからファイルフィールドを削除すると、問題なく機能します。

私はこことGoogleでさまざまな解決策を見てきましたenctypeが、jQueryを介したフォームの設定を含め、基本的に説明されているほとんどすべてを試しましたが、機能しませんでした。

どんな提案でも大歓迎です。

4

9 に答える 9

21

コントローラからJSONを「text/html」として返すだけで、JQuery.parseJSON()を使用してクライアント側で解析できます。

コントローラ:

    return this.Json(
            new
                {
                    prop1 = 5,
                    prop2 = 10
                }, 
            "text/html");

クライアント側:

jsonResponse = $.parseJSON(response);

if(jsonResponse.prop1==5) {
     ...
}

この解決策は私のために働いています。

于 2012-09-29T07:32:29.797 に答える
10

これに対する直接的な解決策は見つかりませんでしたが、最終的に次の回避策を実装しました。ajax設定で使用し、コントローラーからプレーンテキストを返し、クライアント側で値を分離して解析しましたdataType: "text";。そうすることで、IEとForefoxは応答のダウンロードを停止しました。

平文を返す以外に、上記の動作を防ぐ方法は見つかりませんでした。JSONをプレーンテキストとして返し、$。parseJSONで解析しようとしましたが、いくつかのjsエラーのために機能しませんでした。

于 2011-11-19T03:33:35.057 に答える
6

'Content-Type', 'text/html'ヘッダー付きの応答を送信するだけです。

于 2012-12-17T11:15:51.190 に答える
2

設定するだけContent-Type: text/html

application/...これは、IE8がmimetypeを認識しないために発生します。これは私のために働きます。

それが役に立てば幸い。

于 2014-03-11T12:43:21.250 に答える
2

皆さんと同じ状況です。問題は、関数enctype="multipart/form-data"で使用されるフォームでのみ発生し$(form).ajaxSubmit(...)ます。

私のチームと私は、(この関数で)dataType: 'json'オプションを置き換えて、サーバー応答の解析を強制するためdataType: 'text'に追加する必要がありました。responseText = $.parseJSON(responseText);

もちろん、"text/plain"代わりにヘッダー付きの応答を返すためにサーバー側にステップインする必要もありました"application/json"

私たちはそれを誇りに思っていません:(IEは間違いなくすべてを殺しています...

私はzmontecaによって与えられたアドバイスを試しませんでした(すでにそれに多くの時間を費やしました)が、それは価値があるようです:それがあなたにとって大丈夫かどうか私たちに知らせてください。

それが役に立てば幸い!

于 2014-04-16T19:51:24.593 に答える
1

Zendを使用する場合は、次のことができます。

$this->getResponse()->setHeader('Content-Type', 'text/html');

コントローラアクションで。クライアント側では、jQueryの場合は次のことができます

data = $.parseJSON(data);
于 2012-05-09T12:20:09.800 に答える
0

このサイトには、応答をhttp://forum.jquery.com/topic/jquery-form-malsup-ie7-file-download-security-warning-on-ajax-file-uploadにラップすることに関する情報があります。

サーバーにJSONを文字列として返すようにすることで、問題を解決できるようでした。次に、completeイベント内でJSON.parse()を使用しました。

于 2012-05-02T01:35:43.263 に答える
0

私は次の回避策を思いつきました(Zend Frameworkで):

if (!$this->_request->isXmlHttpRequest()) {
    die('<textarea>'.Zend_Json::encode($data).'</textarea>');
}
$this->view->assign($data);
于 2012-06-25T12:13:24.510 に答える
-2

サーバーサイドからContentTypeを削除すると、うまくいきます。

于 2014-10-17T07:33:43.573 に答える