gpt4 book ai didi

jquery - JSON解析错误语法错误意外结束输入

转载 作者:IT老高 更新时间:2023-10-28 12:45:36 28 4
gpt4 key购买 nike

我得到以下代码

function pushJsonData(productName) {
$.ajax({
url: "/knockout/SaveProduct",
type: "POST",
contentType: "application/json",
dataType: "json",
data: " { \"Name\" : \"AA\" } ",
async: false,
success: function () {
loadJsonData();
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus + " in pushJsonData: " + errorThrown + " " + jqXHR);
}
});
}

请注意,我对数据值进行了硬编码。数据被很好地插入数据库。但是,我不断收到错误

parsing error syntax error unexpected end of input

我确信我的数据是正确的 JSON 语法。当我在 Chrome 网络检查器上检查时,saveProduct 请求显示数据是正确的。

{ "Name": "AA" }

此 POST 请求没有响应。所以我对解析错误的来源一无所知。我尝试使用 FireFox 浏览器。同样的事情发生了。

谁能给出一些关于哪里出了问题的想法?

谢谢,

附:这是 Controller 代码

namespace MvcApplJSON.Controllers
{
public class KnockoutController : Controller
{
//
// GET: /Knockout/

public ActionResult Index()
{
return View();
}

[HttpGet]
public JsonResult GetProductList()
{
var model = new List<Product>();
try
{
using (var db = new KOEntities())
{
var product = from p in db.Products orderby p.Name select p;
model = product.ToList();
}
}
catch (Exception ex)
{ throw ex; }
return Json(model, JsonRequestBehavior.AllowGet);
}
[HttpPost]
public void SaveProduct (Product product)
{
using (var db = new KOEntities())
{
db.Products.Add(new Product { Name = product.Name, DateCreated = DateTime.Now });
db.SaveChanges();
}
}
}
}

最佳答案

我不能确定问题是什么。可能是一些坏角色,可能是你在开头和结尾留下的空格,不知道。

无论如何,您不应该像以前那样将 JSON 硬编码为字符串。相反,将 JSON 数据发送到服务器的正确方法是使用 JSON 序列化程序:

data: JSON.stringify({ name : "AA" }),

现在在服务器上还要确保你有正确的 View 模型来接收这个输入:

public class UserViewModel
{
public string Name { get; set; }
}

以及对应的 Action :

[HttpPost]
public ActionResult SaveProduct(UserViewModel model)
{
...
}

现在还有一件事。您已指定 dataType: 'json'。这意味着您期望服务器将返回 JSON 结果。 Controller 操作必须返回 JSON。如果您的 Controller 操作返回一个 View ,这可以解释您遇到的错误。当 jQuery 尝试解析来自服务器的响应时:

[HttpPost]
public ActionResult SaveProduct(UserViewModel model)
{
...
return Json(new { Foo = "bar" });
}

话虽如此,在大多数情况下,当向 ASP.NET MVC Controller 操作发出 AJAX 请求时,通常不需要设置 dataType 属性。这样做的原因是因为当你返回一些特定的ActionResult(比如一个ViewResult或者一个JsonResult)时,框架会自动设置正确的Content-Type 响应 HTTP header 。然后,jQuery 将使用此 header 解析响应并将其作为参数提供给已解析的成功回调。

我怀疑您在这里遇到的问题是您的服务器没有返回有效的 JSON。它要么返回一些 ViewResult 或 PartialViewResult,要么您尝试在 Controller 操作中手动制作一些损坏的 JSON(显然您不应该这样做,而是使用 JsonResult 代替)。

我刚刚注意到的另一件事:

async: false,

请避免将此属性设置为 false。如果您将此属性设置为 false,您将在整个请求执行期间卡住客户端浏览器。在这种情况下,您可以提出一个正常的请求。如果您想使用 AJAX,请从异步事件和回调的角度开始考虑。

关于jquery - JSON解析错误语法错误意外结束输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20827372/

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