![](/img/trans.png)
[英]Always error funtion is executing in json ajax in asp.net controller
[英]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.