簡體   English   中英

jQuery AJAX始終執行錯誤:{}

[英]jQuery AJAX always executing error: {}

我正在使用帶有EntityFramework 6.0的Web應用程序ASP.Net MVC 4.0,嘗試根據用戶選擇更新數據庫。 數據使用jQuery AJAX發送到控制器的動作。 下面給出的是用於更新實體的C#代碼,后者又更新了數據庫。

public void modidyProduct(Productdetail prodData)  
{  
    try  
    {  
        using (SampleTrialEntities entity = new SampleTrialEntities())  
        {  
            var data = entity.Productdetails.Where(p=>p.ProductID == prodData.ProductID).FirstOrDefault<Productdetail>();  
            data.ProductName = prodData.ProductName;  
            data.ProductNumber = prodData.ProductNumber;  
            data.CategoryName = prodData.CategoryName;  
            data.ModelName = prodData.ModelName;  
            entity.Entry(data).State = System.Data.Entity.EntityState.Modified;  
            entity.SaveChanges();  
        }  
    }  
    catch (Exception)  
    {}  
}

這是該控制器操作方法的jQuery AJAX調用。

function updateProduct() {  
        var productData = {  
            ProductName: $('#prodName').val().trim(),  
            ProductNumber: $('#prodNum').val().trim(),  
            CategoryName: $('#ctgryName :selected').text(),  
            ModelName: $('#mdlName :selected').text(),  
            ProductID: atob($('#editProductId').val())  
        };  
        debugger;  
        $('#divLoader').show();  
        $.ajax({  
            url: '@Url.Action("modidyProduct", "Home")',  
            data: JSON.stringify(productData),  
            type: 'POST',  
            dataType: 'json',  
            contentType: 'application/json;charset=utf-8',  
            success: function (jqXHR) {  
                //Below line will destroy DataTable - tblProducts. So that we could bind table again. next line - loadData();  
                $('#tblProducts').DataTable().destroy();  
                $('#divLoader').hide();  
                loadData();  
                $('#addModal').modal('hide');  
                $('#editProductId').val('');  
            },  
            error: function (msg) {  
                debugger;  
                $('#editProductId').val('');  
                $('#divLoader').hide();  
                alert(msg);  
                alert("What's going wrong ?");  
                //alert(jqXHR.responseText);  
            }  
        });  
    }

執行jQuery AJAX方法和控制器操作后,成功更新數據庫中的記錄。 響應狀態碼-200&狀態-確定。 但是只有錯誤:{},每次使用AJAX方法執行代碼塊。 使用OK狀態調試屏幕截圖; 狀態碼-200

$.ajax方法調用的這一部分

dataType: 'json', 

它告訴jQuery,ajax調用代碼期望返回有效的JSON響應,但是當前您的服務器方法的返回類型為void 這意味着它將不返回任何內容,並且$.ajax方法正在嘗試解析響應( 假設它是有效的JSON ),從而得到典型的“ parsererror”

當數據類型為json並且從服務器接收到響應時,將嚴格地解析數據; 任何格式錯誤的JSON都會被拒絕,並引發解析錯誤。 從jQuery 1.9開始,空響應也被拒絕。

解決方案是簡單地刪除調用中的dataType屬性。

$.ajax({
        url: '@Url.Action("modidyProduct", "Home")',
        data: JSON.stringify(productData),
        type: 'POST',
        contentType: 'application/json;charset=utf-8'
    }).done(function() {
        console.log('Success');
    })
    .fail(function(e, s, t) {
        console.log('Failed');
    });

或者,您可以更新服務器操作方法以返回json響應。

[HttpPost]
public ActionResult ModidyProduct(Productdetail prodData)
{
    try
    {
        //to do : Save  
    }
    catch (Exception ex)
    {
        //to do : Log the exception
        return Json(new { status = "error", message=ex.Message });
    }
    return Json(new { status="success"});
}

現在在您的客戶端代碼中,您可以檢查json響應以查看事務是否成功

$.ajax({
        url: '@Url.Action("ModidyProduct", "Home")',
        data: JSON.stringify(productData),
        type: 'POST',
        contentType: 'application/json;charset=utf-8',
        dataType: 'json',
}).done(function (res) {
    if (res.status === 'success') {
        alert('success');
    } else {
        alert(res.message);
    }
        console.log('Success');
 }).fail(function(e, s, t) {
        console.log('Failed');
 });

您不必指定dataType屬性值 如果未指定任何內容,jQuery將嘗試根據返回的響應的mime類型來推斷它,在這種情況下,響應的內容類型將為application/json; charset=utf-8 application/json; charset=utf-8 所以你應該很好。

暫無
暫無

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

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