私は自分の 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.ajax
dataType
指定されたパラメータまたはサーバーから送信されたヘッダーに基づいて、レスポンス本文を変換しようとしますContent-Type
。変換が失敗した場合 (JSON/XML が無効である場合など)、エラー コールバックが起動されます。
AJAX コードには次の内容が含まれます。
dataType: "json"
この場合、jQuery は次のようになります。
応答を JSON として評価し、JavaScript オブジェクトを返します。[…] JSON データは厳密に解析され、不正な形式の JSON は拒否され、解析エラーがスローされます。[…] 空の応答も拒否されるため、サーバーは代わりに null または {} の応答を返す必要があります。
サーバー側のコードは、200 OK
ステータスを含む HTML スニペットを返します。jQuery は有効な JSON を期待していたため、 に関するエラー コールバックを起動しますparseerror
。
解決策は、dataType
jQuery コードからパラメータを削除し、サーバー側のコードが以下を返すようにすることです。
Content-Type: application/javascript
alert("Record Deleted");
しかし、JSON 応答を返して成功コールバック内にメッセージを表示することをお勧めします。
Content-Type: application/json
{"message": "Record deleted"}