2016-11-16 3 views
0

空のレスポンスボディを返すPOSTサービスがバックエンドにあります。空のレスポンスでJqueryのプロミスコールバックが実行されない

私は約束を返します。このようなjqueryのからAJAX呼び出しを使用してサービスを呼び出す:

return $.when($.ajax({ 
    type: 'POST', 
    url: url, 
    beforeSend: (xhr) => { 
     xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8') 
    }, 
    data: data, 
    dataType: 'json', 
    crossDomain: true 
})) 

次にメソッド呼び出し:しかし、だから、AJAX呼び出しが行われた

myMethod(params).done(
    (response) => { 
    console.log(response) 
    } 
) 

をdoneは決して実行されません。 サーバーが応答本体に何かを返す場合、それは機能します。

私は何が欠けているのか分かりません。

+2

あなたは '$ .when'は必要ありません。 '$ .ajax(..)'だけを返してください。 – hindmost

+1

あなたは 'fail()'を返さないと確信していますか?たぶんあなたは '。常に()'をしたいでしょうか? – Liam

+0

hindmost私は約束が欲しい。 @Liam、失敗する可能性がありますが、完了すると、常に同じではありませんか? – Pablo

答えて

2

Jquery 1.9は、空の結果を失敗としてjson ajaxリクエストを処理します。

JSONデータは厳密に解析されます。不正なJSONが拒否され、解析エラーがスローされます。 jQuery 1.9では、空の応答も拒否されました。サーバーは代わりにnullまたは{}の応答を返さなければなりません。 (適切なJSONフォーマットの詳細については、json.orgを参照してください。)あなたはfailケースとしてこれを処理する必要がありますいずれか

json型を使用、またはJSONが要求されたときに、空の応答を送信しないようにサーバーを固定していません。

+0

この空の応答のタイプは? – Pablo

+1

サーバを制御しているなら、 '{}'を返すように変更します。さもなければ、空のレスポンスをチェックし、それを '{}'に置き換えるajaxリクエストの 'dataFilter'関数ですか? –

+0

私はそれを制御しません。 dataTypeを 'text'などに変更することはできませんか? – Pablo

関連する問題