javascript - 送信 - json get jquery




Ajaxリクエストは200 OKを返すが、成功の代わりにエラーイベントが発生する (11)

jQuery.ajaxは、指定されたdataTypeパラメーターまたはサーバーが送信したContent-Typeヘッダーに応じて、応答本体を変換しようとします。 変換に失敗した場合(JSON / XMLが無効な場合など)、エラーコールバックが発生します。

あなたのAJAXコードに含まれるもの:

dataType: "json"

この場合、jQuery:

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

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

解決策は、jQueryコードからdataTypeパラメータを削除し、サーバー側コードを返すことです。

Content-Type: application/javascript

alert("Record Deleted");

しかし、私はむしろJSONレスポンスを返すことを提案し、successコールバック内にメッセージを表示します:

Content-Type: application/json

{"message": "Record deleted"}

私は自分のウェブサイトで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);
}

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")文字列が必要です。 私はコンテンツを削除することができますが、私はこのメッセージを受け取っていません。 これは正しいのですか、何か間違っていますか? この問題を解決する正しい方法は何ですか?


あなたのaspxページがJSONオブジェクトを返さないと思います。 あなたのページはこのようなことをするべきです(page_load)

var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<your object>);

Response.Write(OutPut);

また、あなたのAjaxFailedを変更しよう:

function AjaxFailed (XMLHttpRequest, textStatus) {

}

textStatusはあなたが得ているエラーのタイプを与えるはずです。


あなたは単にあなたの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の同じ起源のポリシーのために成功することができませんでした。 私のサーバ(Node.js)を変更したときに、すべてが解決されました:

response.writeHead(200,
          {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "http://localhost:8080"
        });

それは文字通り私の頭を壁に叩く時間を要した。 私は愚かな気分です...


サーバーからJSONを返す場合(空のレスポンスなし)、 dataType: 'json'は動作し、 contentTypeは必要ありません。 しかし、JSONの出力を確認してください...

jQuery AJAXは、有効ではあるがシリアル化されていないJSONに「parseerror」をスローします。


スペースを区切った複数のdataTypejQuery.ajax )を使用することで、いくつかの幸運がありました。 次のように:

$.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
});

実装されたWebサービスメソッドが無効な場合は、ヘッダーからdataType: 'json'を削除するだけです。

この場合、Ajax呼び出しはJSON戻りデータ型を持つとは考えていません。


応答がJSON形式(PHP版)であることを確認するには、次のコードを使用してください...

header('Content-Type: application/json');
echo json_encode($return_vars);
exit;

私は同様の問題を抱えていますが、データ型を削除しようとすると '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); }
    });
}

私は更新されたjQueryライブラリでこの問題に直面しています。 サービスメソッドが何も返さない場合は、戻り値の型がvoidであることを意味しvoid

それから、あなたのAjaxコールで、 dataType='text'記述してください。

問題を解決します。


私も同じ問題がありました。 私の問題は、私のコントローラがJSONではなくステータスコードを返すことでした。 あなたのコントローラが次のようなものを返すことを確認してください:

public JsonResult ActionName(){
   // Your code
   return Json(new { });
}






json