2

JQuery ajax メソッドを介して ASP.NET MVC actionMethod を呼び出そうとしています。私のコードは次のとおりです。

$('.Delete').live('click', function() {
    var tr = $(this).parent().parent();

    $.ajax({
        type: 'DELETE',
        url: '/Routing/Delete/' + tr.attr('id'),
        contentType: 'application/json; charset=utf-8',
        data: '{}',
        dataType: 'json',
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert("Error: " + textStatus + " " + errorThrown);
            alert(XMLHttpRequest.getAllResponseHeaders());
        },
        success: function(result) {
            // Remove TR element containing waypoint details
            alert("Success");
            $(tr).remove();
        }
    });
});

私のアクションメソッドは次のとおりです。

[AcceptVerbs(HttpVerbs.Delete)]
public string Delete(int id)
{
    // Deletion code

    return " ";
}

content-length が 0 の場合、問題が発生する可能性があることをどこかで読んだときに、空の文字列を返します。戻り値の型が文字列の場合、「エラー: エラー未定義」という警告ボックスが表示され、2 番目の警告ボックスは空です。

戻り値の型を void にすると、「Error: parsererror undefined」というアラートが表示され、2 つ目のアラートは次のようになります。

Server: ASP.NET Development Server/9.0.0.0
Date: Wed, 22 Jul 2009 08:27:20 GMT
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 1.0
Cache-Control: private
Content-Length: 0
Connection: Close
4

2 に答える 2

5

jQuery呼び出しは、リクエストの代わりにJsonを期待します。それで :

[AcceptVerbs(HttpVerbs.Delete)]
public JsonResult Delete(int id) {
    // Deletion code
    return Json("");
}

また、 redsquareにも同意します。次のような論理メッセージを返す方がよいでしょう:

[AcceptVerbs(HttpVerbs.Delete)]
public JsonResult Delete(int id) {
    // Deletion code
    return Json(new { Success = true });
}

//then in your jQuery function you can check the result this way :
success: function(result) {
    if (result.Success) {
        alert("it was deleted!");
    }
    else {
        alert("something went wrong");
    }
}
于 2009-07-22T08:50:45.180 に答える
4

空の文字列を返すことはお勧めしません。dataType を json に設定したため、jquery は応答を評価します。

常に論理メッセージを返す必要があります。

return Json(new { success = "true" });

あなたが使用している成功の中でNB $(tr).remove(); tr 変数はすでに jQuery オブジェクトであるため、必要はありません tr.remove。問題なく動作します。

于 2009-07-22T08:42:41.077 に答える