json解析错误语法错误意外结束输入

 劳资就是若听_979 发布于 2023-02-07 16:37

我得到了以下代码

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);
        }
    });
}

请注意,我对数据值进行了硬编码.数据很好地推送到数据库中.但是,我不断收到错误"解析错误语法错误意外结束输入".我确信我的数据是正确的JSON语法.当我在Chrome of Chrome检查器上查看时,saveProduct请求显示数据是正确的.

{ "Name": "AA" }

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

任何人都可以对错误提出一些看法吗?

谢谢,

PS这是控制器代码

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

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

        [HttpGet]
        public JsonResult GetProductList()
        {
            var model = new List();
            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();
            }
        }
    }
}

Darin Dimitr.. 73

不能确定问题是什么.可能是一些不好的角色,可能是你在开始和结束时留下的空间,不知道.

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

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

现在,在服务器上还要确保您具有期望接收此输入的正确视图模型:

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

和相应的行动:

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

现在还有一件事.你已经指定了dataType: 'json'.这意味着您希望服务器返回JSON结果.控制器操作必须返回JSON.如果您的控制器操作返回一个视图,这可以解释您获得的错误.当jQuery尝试解析来自服务器的响应时:

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

这就是说,在大多数情况下,在dataType向ASP.NET MVC控制器操作发出AJAX请求时,您不需要设置属性.原因是当您返回一些特定的ActionResult(例如ViewResult或JsonResult)时,框架将自动设置正确的ActionResult响应HTTP标头.然后,jQuery将使用此标头来解析响应并将其作为参数提供给已解析的成功回调.

我怀疑你在这里遇到的问题是你的服务器没有返回有效的JSON.它要么返回一些ViewResult,要么返回PartialViewResult,或者你试图在你的控制器动作中手动制作一些破碎的JSON(显然你不应该这样做,而是使用JsonResult).

我刚注意到的另一件事:

async: false,

请避免将此属性设置为false.如果您将此属性设置为ViewResult您在整个请求执行期间冻结客户端浏览器.在这种情况下,您可以发出正常请求.如果您想使用AJAX,请开始考虑异步事件和回调.

1 个回答
  • 不能确定问题是什么.可能是一些不好的角色,可能是你在开始和结束时留下的空间,不知道.

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

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

    现在,在服务器上还要确保您具有期望接收此输入的正确视图模型:

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

    和相应的行动:

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

    现在还有一件事.你已经指定了dataType: 'json'.这意味着您希望服务器返回JSON结果.控制器操作必须返回JSON.如果您的控制器操作返回一个视图,这可以解释您获得的错误.当jQuery尝试解析来自服务器的响应时:

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

    这就是说,在大多数情况下,在dataType向ASP.NET MVC控制器操作发出AJAX请求时,您不需要设置属性.原因是当您返回一些特定的ActionResult(例如ViewResult或JsonResult)时,框架将自动设置正确的ActionResult响应HTTP标头.然后,jQuery将使用此标头来解析响应并将其作为参数提供给已解析的成功回调.

    我怀疑你在这里遇到的问题是你的服务器没有返回有效的JSON.它要么返回一些ViewResult,要么返回PartialViewResult,或者你试图在你的控制器动作中手动制作一些破碎的JSON(显然你不应该这样做,而是使用JsonResult).

    我刚注意到的另一件事:

    async: false,
    

    请避免将此属性设置为false.如果您将此属性设置为ViewResult您在整个请求执行期间冻结客户端浏览器.在这种情况下,您可以发出正常请求.如果您想使用AJAX,请开始考虑异步事件和回调.

    2023-02-07 16:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有