Ajax リクエストは 200 OK を返しますが、成功ではなくエラー イベントが発生します 質問する

Ajax リクエストは 200 OK を返しますが、成功ではなくエラー イベントが発生します 質問する

私は自分の Web サイトに Ajax リクエストを実装し、Web ページからエンドポイントを呼び出しています。常に200 OKが返されますが、jQuery はエラー イベントを実行します。
いろいろ試しましたが、問題の原因がわかりません。以下にコードを追加します。

jQuery コード

var row = "1";
var json = "{'TwitterId':'" + row + "'}";
$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});
function AjaxSucceeded(result) {
    alert("hello");
    alert(result.d);
}
function AjaxFailed(result) {
    alert("hello1");
    alert(result.status + ' ' + result.statusText);
}

C#コードJqueryOpeartion.aspx

protected void Page_Load(object sender, EventArgs e) {
    test();
}
private void test() {
    Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}

削除が成功した後の文字列が必要です("Record deleted")。コンテンツを削除することはできますが、このメッセージが表示されません。これは正しいのでしょうか、それとも何か間違っているのでしょうか。この問題を解決する正しい方法は何ですか?

ベストアンサー1

jQuery.ajaxdataType指定されたパラメータまたはサーバーから送信されたヘッダーに基づいて、レスポンス本文を変換しようとしますContent-Type。変換が失敗した場合 (JSON/XML が無効である場合など)、エラー コールバックが起動されます。


AJAX コードには次の内容が含まれます。

dataType: "json"

この場合、jQuery は次のようになります。

応答を JSON として評価し、JavaScript オブジェクトを返します。[…] JSON データは厳密に解析され、不正な形式の JSON は拒否され、解析エラーがスローされます。[…] 空の応答も拒否されるため、サーバーは代わりに null または {} の応答を返す必要があります。

サーバー側のコードは、200 OKステータスを含む HTML スニペットを返します。jQuery は有効な JSON を期待していたため、 に関するエラー コールバックを起動しますparseerror

解決策は、dataTypejQuery コードからパラメータを削除し、サーバー側のコードが以下を返すようにすることです。

Content-Type: application/javascript

alert("Record Deleted");

しかし、JSON 応答を返して成功コールバック内にメッセージを表示することをお勧めします。

Content-Type: application/json

{"message": "Record deleted"}

おすすめ記事