1

私のコードはajax呼び出しを行います:

$.ajax({
    url: "/Controller/EmailUserKeys",
    dataType: 'json',
    success: function () {
        alert('success');
    },
    error: function () {
        alert('error');
    }
});

コントローラ内のアクションを呼び出して、JSONを返します。

public JsonResult EmailUserKeys(string UserId)
{
    ...
    return Json(new { success = true });
}

私の問題は、ajaxエラー関数が呼び出され、ajax成功関数が呼び出されないことです。

なんで?

PS。私のアクションが「returnnull;」を返す場合、ajax成功関数が呼び出されます。

4

2 に答える 2

8

JSON結果を返す場合、デフォルトで無効になっているGETを許可する必要があります。

public JsonResult EmailUserKeys(string UserId)
{
    ...
    return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}

またはPOSTリクエストを使用します。

$.ajax({
    url: "/Controller/EmailUserKeys",
    type: "POST",
    dataType: 'json',
    data: { userId: 'some user id' },
    success: function () {
        alert('success');
    },
    error: function () {
        alert('error');
    }
});

また、あなたがしたように、あなたのコントローラーアクションへのURLを決してハードコーディングしないでください。ASP.NET MVCアプリケーションでURLを処理するときは、常にURLヘルパーを使用してください。

url: "@Url.Action("EmailUserKeys", "Controller")",

そして、ここにアドバイスがあります。Web開発を行う場合は、 FireBugなどのJavaScriptデバッグツールを使用してください。他の便利なものの中でも、AJAXリクエストを検査することができます。これを使用した場合、サーバーから送信された応答は次のようになります。

GETリクエストで機密情報が使用されると、機密情報がサードパーティのWebサイトに開示される可能性があるため、このリクエストはブロックされました。GETリクエストを許可するには、JsonRequestBehaviorをAllowGetに設定します。

そして、あなたはすでに答えを知っているので、StackOverflowに来てこの質問をする必要はありません。

于 2012-08-22T06:07:10.897 に答える
5

次のようにコードを編集する必要があります。

public JsonResult EmailUserKeys(string UserId)
{
    return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}

詳細については、公式ドキュメントを参照してください。

http://msdn.microsoft.com/en-us/library/system.web.mvc.jsonrequestbehavior.aspx

これをデフォルトで無効にする理由は、JSONハイジャックが原因です。これについての詳細はここで見つけることができます:

http://haacked.com/archive/2009/06/25/json-hijacking.aspx

これがお役に立てば幸いです。

于 2012-08-22T06:07:00.260 に答える