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

我得到了以下代码

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检查器的网络上进行检查时,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<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" }),

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

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(例如a ViewResult或a

JsonResult)时,框架将自动设置正确的Content-

Type响应HTTP标头。然后,jQuery将使用此标头来解析响应并将其作为参数传递给已解析的成功回调。

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

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

async: false,

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

以上是 json解析错误语法错误输入意外结束 的全部内容, 来源链接: utcz.com/qa/429522.html

回到顶部