Изучаю javascript. Дошёл до ajax запросов. Есть у меня запрос написанный с помощью jquery. Код view:
@{
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 а прям в виде стринга и передавал. Всё нормально запрос отрабатывает возвращает success. Попробовал так как сейчас в коде. Запрос выполняется возвращает искомый результат, но почему то далее идёт в функцию error но при этом я проверяю 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);
}
Потому что строчкой
dataType: "json",
Вы явно говорите, что ожидаете ответ в виде JSON. А возвращаете View
, то есть - html. Этот текст не может быть преобразован в объект javascript-a, поэтому уже на клиенте (после успешного прихода туда html) происходит ошибка парсинга. Уберите эту строчку или замените ее на
dataType: "html",
Если бы Вы возвращали ответ действительно в виде JSON, то параметр data
в обработчике success
был бы объектом. Для dataType: "html"
или "text"
этот параметр - строка.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В чём разница использования следующих вызовов переменных? Как я понял, одни из них устарели и не безопасны, но в чём это заключается я так...
положил страницу с вот таким php скриптом на удалённый хостинг
Пишу простое консольное приложение с командами на основе классов Symfony\Component\Console\Command\Command