1. ホーム
  2. javascript

[解決済み] Ajaxリクエストが200 OKを返すが、successではなくerrorイベントが発生する

2022-03-17 18:07:55

質問内容

私のウェブサイトにAjaxリクエストを実装し、ウェブページからエンドポイントを呼び出しています。それは常に 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") 文字列を削除します。コンテンツを削除することはできますが、このメッセージが表示されません。これは正しいのでしょうか、それとも何か間違ったことをしているのでしょうか?この問題を解決する正しい方法は何でしょうか?

解決方法を教えてください。

jQuery.ajax は、レスポンスボディを指定された dataType パラメータ、または Content-Type ヘッダを送信します。変換に失敗した場合(JSON/XMLが無効な場合など)、エラーコールバックが起動されます。


あなたのAJAXコードには

dataType: "json"

この場合、jQueryです。

レスポンスをJSONとして評価し、JavaScriptオブジェクトを返します。[...] JSONデータは厳密な方法でパースされます。 は拒否され、パースエラーが投げられる。[中略)空のレスポンスもまた サーバは代わりにnullまたは{}の応答を返す必要があります。

サーバーサイドのコードは、HTML スニペットを 200 OK jQuery は有効な JSON を期待していたため、以下のようなエラー コールバックを発生させました。 parseerror .

を削除することで解決します。 dataType パラメータをjQueryのコードから取り除き、サーバー側のコードを返すようにします。

Content-Type: application/javascript

alert("Record Deleted");

しかし、私はむしろ、JSONレスポンスを返して、成功コールバックの中にメッセージを表示することを提案します。

Content-Type: application/json

{"message": "Record deleted"}