私は自分のWebサイトにAjaxリクエストを実装し、Webページからエンドポイントを呼び出しています。常に 200 OK が返されますが、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);
}
JqueryOpeartion.aspx
のC#コード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データは厳密な方法で解析されます。不正なJSONは拒否され、解析エラーが発生します。 […]空の応答も拒否されます。サーバーは代わりにnullまたは{}の応答を返すべきです。
サーバーサイドコードは200 OK
ステータスのHTMLスニペットを返します。 jQueryは有効なJSONを期待していたので、parseerror
について文句を言うエラーコールバックを起動します。
解決策は、jQueryコードからdataType
パラメータを削除し、サーバーサイドコードに返させることです。
Content-Type: application/javascript
alert("Record Deleted");
しかし、私はむしろJSONレスポンスを返して、成功コールバックの中にメッセージを表示することをお勧めします。
Content-Type: application/json
{"message": "Record deleted"}
私は、スペースで区切られた複数のdataType
s( jQuery 1.5+ )を使用して、幸運を祈りました。のように:
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'text json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
AJAX呼び出しで dataType: "json" を削除するだけです。
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json', //**** REMOVE THIS LINE ****//
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
私がこの問題の解決策を探しているときにこの記事に遭遇したので、これはちょうど記録のためのものです。それはOPのものに似ていました。
私の場合、私のjQuery AjaxリクエストはChromeで same-Originポリシー が原因で成功するのを妨げられました。サーバ(Node.js)を以下のように変更したところ、すべて解決しました。
response.writeHead(200,
{
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "http://localhost:8080"
});
それは文字通り私の頭を壁にぶつけるのに1時間かかる。私はばかげている...
あなたのaspxページはJSONオブジェクトを返さないと思います。あなたのページはこのようなことをするべきです(page_load)
var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<your object>);
Response.Write(OutPut);
また、AjaxFailedを変更してみてください。
function AjaxFailed (XMLHttpRequest, textStatus) {
}
textStatus
はあなたにあなたが得ているエラーのタイプを与えるべきです。
更新されたjQueryライブラリでこの問題に直面しました。サービスメソッドが何も返さない場合は、戻り型がvoid
です。
それから、Ajax呼び出しでdataType='text'
を言及してください。
それは問題を解決します。
実装したWebサービスメソッドが無効な場合は、ヘッダーからdataType: 'json'
を削除するだけです。
この場合、Ajax呼び出しはJSON戻りデータ型を持つことを期待していません。
私は同じ問題を抱えていました。私の問題は私のコントローラーがJSONの代わりにステータスコードを返していたことです。コントローラが次のようなものを返すことを確認してください。
public JsonResult ActionName(){
// Your code
return Json(new { });
}
私は同様の問題を抱えていますが、データ型を削除しようとしたときに 'json'私はまだ問題を抱えています。私のエラーは成功の代わりに実行されています
function cmd(){
var data = JSON.stringify(display1());
$.ajax({
type: 'POST',
url: '/cmd',
contentType:'application/json; charset=utf-8',
//dataType:"json",
data: data,
success: function(res){
console.log('Success in running run_id ajax')
//$.ajax({
// type: "GET",
// url: "/runid",
// contentType:"application/json; charset=utf-8",
// dataType:"json",
// data: data,
// success:function display_runid(){}
// });
},
error: function(req, err){ console.log('my message: ' + err); }
});
}
次のコードを使用して、レスポンスがJSON形式(PHPバージョン)であることを確認してください。
header('Content-Type: application/json');
echo json_encode($return_vars);
exit;
これを見なさい 。それも同様の問題です。私が試してみました。
dataType: 'JSON',
を削除しない
注:phpエコーのみを使用している場合はPHPファイルにJSON Formateのみをエコーし、ajaxコードでは200を返してください
私を困惑させたもう1つのことは、127.0.0.1の代わりにlocalhost
を使用すること、またはその逆です。どうやら、JavaScriptは一方から他方への要求を処理できません。
私は同じ問題を抱えていました。これは、私のJSONレスポンスに特殊文字が含まれていて、サーバーファイルがUTF-8でエンコードされていなかったためです。そのため、Ajax呼び出しはこれが有効なJSONレスポンスではないと見なしました。
常にサーバーからJSONを返す(空の応答がない)場合は、dataType: 'json'
が機能し、contentType
は不要です。しかし、JSON出力を確認してください...
jQuery AJAXは、有効だがシリアル化されていないJSONに対して「parseerror」をスローします。