jquery.post がコード #200 (OK) を返すが、エラー ハンドラがヒットするという奇妙なケースがあります。
これは私の MVC WebAPI サーバー側コードです (コード #200 OK を返すだけです):
[HttpPost]
public HttpResponseMessage Post(T input)
{
//_handler.Create(input);
return Request.CreateResponse(HttpStatusCode.OK);
}
これは私のクライアントスクリプトです
ServerAccess.prototype.Save = function (m) {
$.post("http://localhost:55482/M/", m)
.success(
function (o) {
alert("success");
})
.error(
function (xhr, textStatus, errorThrown) {
if (typeof console == 'object' && typeof console.log == 'function') {
console.log(xhr);
console.log(textStatus);
console.log(errorThrown);
}
}
);
};
Firebug のコンソール出力は次のとおりです。
POST
http://localhost:55482/M/
200 OK 894msヘッダー
応答ヘッダー
コンテンツの長さ 6
コンテンツ タイプ アプリケーション/json; 文字セット=utf-8
日付 2012 年 10 月 28 日(日)18:55:17 GMT
サーバー Microsoft-HTTPAPI/2.0
リクエスト ヘッダー
受け入れる /
Accept-Encoding gzip、デフレート
Accept-Language nb-no,nb;q=0.9,no-no;q=0.8,no;q=0.6,nn-no;q=0.5,nn;q=0.4,en-us;q=0.3,en ;q=0.1
接続キープアライブ
コンテンツの長さ 21
Content-Type application/x-www-form-urlencoded; 文字セット=UTF-8
ホスト localhost:55482
原点ヌル
ユーザーエージェント Mozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0
と
オブジェクト { readyState=0, status=0, statusText="エラー"}
エラー
(空の文字列)
私はブラウジングして、他の人が同様の問題を抱えているのを見てきました。通常、応答の JSON の形式が正しくありません。私は 200 OK とコンテンツなしを返すだけなので、これは私の場合には当てはまらないようです。しかし、私はそのように空のオブジェクトを返そうとしました
var o = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(new T());
return Request.CreateResponse(HttpStatusCode.OK, o);
サーバー側は Visual Studio 2012 から実行され、クライアントはいくつかの .js ファイルを含む単なるスタンドアロンの .html です。また、VS のブレークポイントを使用すると、リクエストがサーバーによって受信されたことがわかります。Postman for Chrome を使用すると、すべてがうまく機能します。
したがって、問題はもちろんです。ここで何が間違っているのでしょうか。エラーハンドラがヒットするのはなぜですか?
ありがとう!