我正在学习 JavaScript。得到ajax请求。我有一个用 jquery 编写的查询。查看代码:
@{
ViewBag.Title = "Index";
}
<div>
<input type="text" name="name" id="txt" />
<input type="button" id="btn" class="edit" value="Отправить" />
@section scripts {
<script type="text/javascript">
$('#btn').on('click', function () {
var message = { "name": $('#txt').val() };
$.ajax({
type: "POST",
url: "/Home/BookSearch",
data: JSON.stringify(message),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
alert('Успех');
$('#results').html(data);
},
error: function (xhr) {
alert(xhr.status + 'Ошибка');
}
});
});
</script>
}
<div id="results"></div>
</div>
一开始我尝试不将字符串变量转换为json,而是直接以字符串的形式传递。一切都很好,请求完成返回成功。像现在在代码中一样尝试。请求被执行,它返回了想要的结果,但由于某种原因,它更进一步的错误函数,但同时我检查 xhr.status 或 c# 仍然有 enum HttpStatusCode 并且这个状态是 200,相当于好的。那么为什么然后去错误分支呢?但是如果我从这个请求中删除一行,dataType: "json",那么一切都会像没有 json 一样正常工作。我不明白为什么会这样。如果需要,这是我的控制器代码:
Context db = new Context();
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult BookSearch(string name)
{
var allbooks = db.Books.Where(a => a.Author.Contains(name)).ToList();
if (allbooks.Count <= 0)
{
return HttpNotFound();
}
return View(allbooks);
}
因为线
您明确表示您期待 JSON 响应。而你返回
View,即-html。此文本无法转换为 javascript-a 对象,因此,已经在客户端(在 html 成功到达那里之后),会发生解析错误。删除此行或将其替换为如果您实际上将响应作为 JSON 返回,则
data处理程序中的参数success将是一个对象。FordataType: "html"or"text"这个参数是一个字符串。