簡體   English   中英

jQuery ajax無法正常工作(服務器端是ASP.net)

[英]The jquery ajax doesn't work (the server side is ASP.net)

我的代碼有問題。 jQuery ajax無法正常工作。 我的jQuery腳本是這樣的:

$('#AddPermission').click(function () {
    var _permissionId = $('#PermissionId').val();            
    var _roleId = $('#Role_Id').val();
    if (_permissionId == '') {
        return false;
    }
    var _parameters = { permissionId: _permissionId, id: _roleId };
    console.log(_parameters);
    $.ajax({
        url: "/Admin/AddPermission2RoleReturnPartialView",
        type: "GET",
        data: _parameters,
        success: function (data, textStatus, jqXHR) {
            console.log(data);
            $('#PermissionsTable').html(data);
            $('#PermissionId').val("");
        },
        error: function (xhr, textStatus, errorThrown){
            console.log(errorThrown);
        }
    });
});

我用ASP編寫的服務器端腳本是這樣的:

 [HttpGet]
        [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
        [ValidateAntiForgeryToken]
        public PartialViewResult AddPermission2RoleReturnPartialView(int id, int permissionId)
        {
            Response.Write("Code1");
            ROLE role = database.ROLES.Find(id);
            PERMISSION _permission = database.PERMISSIONS.Find(permissionId);

            if (!role.PERMISSIONS.Contains(_permission))
            {
                role.PERMISSIONS.Add(_permission);
                database.SaveChanges();
            }
            return PartialView("_ListPermissions", role);
        }

在控制台中運行時,我給出了以下數據:

對象{PermissionId:“ 39”,id:“ 3”}

內部服務器錯誤

有人可以幫我嗎?

刪除方法上的ValidateAntiForgeryToken屬性,因為您不使用Token進行表單發布,而只是進行ajax調用,並嘗試使用jquery的param函數包裝ajax調用的參數

$.ajax({
       url: "@Url.Action("ActionName", "ControllerName")",
       type: "GET",
       data: $.param(_parameters),
       success: function (data, textStatus, jqXHR) {
        console.log(data); 
       },
       error: function (xhr, textStatus, errorThrown) {
        console.log(errorThrown)
       }
  });

如果您確實在html中有AntiForgeryToken,則必須在參數中發送它,例如,如果我在控制器中有一個方法,例如

[AcceptVerbs(HttpVerbs.Post)] 
[ValidateAntiForgeryToken]
public ActionResult GetResult(int? id, int? someValue)
{
   return PartialView("TestPartial");
}

並且在視圖中html看起來像

<div class="somediv">
@Html.AntiForgeryToken()
<button class="btn btn-primary" id="btnTest">Test Me</button>
</div>
<div id="someId"></div>

最后的jQuery代碼將是

$("#btnTest").click(function (e) {
     e.preventDefault();
      var p = { id: 123, someValue: 1234, __RequestVerificationToken: 
               $("input[name='__RequestVerificationToken']").val() };
      $.ajax({
         type: "POST",
         url: "@Url.Action("GetResult", "ControllerName")",
         data: $.param(p),
         dataType: "application/json",
         complete: function (data) {
              $("#someId").empty().append(data.responseText);
          }
       });
 });

確保方法接受動詞類型應為POST

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM