Я использую сообщение Ajax для вызова контроллера, однако я не получаю ответа и получаю сообщение об ошибке.
Я вижу, что контроллер также получает null для имени пользователя, где ajax работает правильно. Ниже мой код
Ajax попадает в контроллер, и входное значение (имя пользователя) печатается как null в systemout, следовательно, не получает ожидаемого значения
Мой весенний контроллер
@Controller
public class SearchController {
UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@PostMapping("/api/search")
public String getSearchResultViaAjax(String username) {
System.out.println(username);
String result=userService.findByNativeByName(username);
return result;
}
}
Мой Ajax, который отправляет сообщения
function fire_ajax_submit() {
var name = $("#username").val();
$("#btn-search").prop("disabled", true);
$.ajax({
type: "POST",
contentType: "text/plain",
url: "/api/search",
data: name,
dataType: 'text',
cache: false,
timeout: 600000,
success: function (data) {
var json = "<h4>Ajax Response</h4><pre>"
data + "</pre>";
$('#feedback').html(json);
console.info("SUCCESS : ", data);
$("#btn-search").prop("disabled", false);
}
error: function (e) {
var json = "<h4>Ajax Response</h4><pre>"
+ e.responseText + "</pre>";
$('#feedback').html(json);
console.info("ERROR : ", e);
$("#btn-search").prop("disabled", false);
}
});
}
Мой HTML
<form class = "form-horizontal" id = "search-form">
<div class = "form-group form-group-lg">
<label class = "col-sm-2 control-label">Username</label>
<div class = "col-sm-10">
<fieldset>
<p>
<select id = "username" class = "form-control">
<option value = "Kilu">Kilu</option>
<option value = "Maha">Maha</option>
</select>
</p>
</fieldset>
</div>
</div>
</form>
Любая помощь будет высоко ценится
@Sam, я тоже пробовал, и у меня все та же проблема

Попробуйте передать данные, как показано ниже:
data: { "username": name },
data: {"name": name}, по-прежнему выдает ту же ошибку отсутствия ответа
вы уверены, что ajax попадает в контроллер, и вы получаете значение, а ваш контроллер возвращает что-то, но не ноль? .. сначала подтвердите все 3.
Ajax попадает в контроллер, и входное значение (имя пользователя) печатается как null в systemout, следовательно, не получает ожидаемого значения
Ответ Сандип Ратор почти правильный, за исключением того, что имя параметра должно быть username.
Итак, в коде ajax измените data на ниже:
data: { "username": name }
или с помощью @RequestParam() для сброса параметра в методе вашего контроллера:
public String getSearchResultViaAjax(@RequestParam("name")String username)
обновленный ответ
Ответ представляет собой данные формата JSON, вы можете использовать приведенный ниже код, чтобы получить его.
success: function (data) {
data = eval("(" + data + ")");
console.info(data.username);
}
я могу получить ответ сейчас. Однако, если я печатаю ответ, он выводит данные {"username": "Danish"}. Как получить значение «датский» в одиночку?
@kulumakani привет, я обновил свой ответ, вы можете проверить это сейчас
Вам нужно поставить "," (запятая) после вашего блок успеха, иначе вы будете продолжать получать ту же ошибку на своей странице на консоли: -
success: function (data) {
//your code
}, // right here to indicate the end of this block here as you're putting your error block after this.
я могу получить ответ сейчас. Однако, если я печатаю ответ, он выводит данные {"username": "Danish"}. Как получить значение «датский» в одиночку?
@kulumakani, чтобы сделать это, получите / проанализируйте свой 'имя пользователя' или результат (или любое другое имя переменной, которое вы используете в ответ от контроллера) из `` данных '' в строку Json в вашей функции ajax-success, примерно так: - - успех: функция (данные) {console.info (JSON.stringify (data.result)); }
Попробуйте изменить contentType,
contentType: 'application/json; charset=utf-8;'
А также поставьте ',' (запятую) после блока успеха.
1) Ваш Spring Controller должен быть @RestController или @Controller с методом, аннотированным как @ResponseBody.
2) Разместите такие данные ==> data: {"username": name},
3) После получения данных используйте stringify () для их отображения и используйте JSON.parse () для извлечения значения.
4) Проверьте параметр заголовка типа контента (contentType: 'application / json; charset = utf-8;')
Разве вы не должны использовать аннотацию
@RequestBodyнаgetSearchResultViaAjax?