gpt4 book ai didi

c# - jQuery AJAX 总是执行错误 : {}

转载 作者:行者123 更新时间:2023-12-01 08:41:17 24 4
gpt4 key购买 nike

我正在开发一个 Web 应用程序,ASP.Net MVC 4.0 和 Entity Framework 6.0,尝试根据用户选择更新数据库。使用 jQuery AJAX 将数据发送到 Controller 的操作。下面给出的是更新实体的 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)
{}
}

这是对该 Controller 操作方法的 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 方法和 Controller 操作后,成功更新数据库中的记录。返回响应状态码 - 200 和状态 - OK。但只有错误:{ },在AJAX方法中每次都会执行代码块。 Debugging screen capture with status-OK; statuscode - 200

最佳答案

$.ajax 方法调用的这一部分

dataType: 'json', 

它告诉 jQuery,ajax 调用代码需要返回有效的 JSON 响应,但当前服务器方法的返回类型为 void。这意味着它不会返回任何内容,并且 $.ajax 方法正在尝试解析响应(假设它是有效的 JSON),从而获得典型的 “解析器错误”

当数据类型为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;字符集=utf-8。所以你应该表现得很好。

关于c# - jQuery AJAX 总是执行错误 : {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46994832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com