Текст данных Spring + Ajax Post

Я использую сообщение 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>

Любая помощь будет высоко ценится

Разве вы не должны использовать аннотацию @RequestBody на getSearchResultViaAjax?

Sam 25.06.2018 06:46

@Sam, я тоже пробовал, и у меня все та же проблема

kulu makani 25.06.2018 06:56
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
2
1 750
5

Ответы 5

Попробуйте передать данные, как показано ниже:

 data: { "username": name },

data: {"name": name}, по-прежнему выдает ту же ошибку отсутствия ответа

kulu makani 25.06.2018 06:36

вы уверены, что ajax попадает в контроллер, и вы получаете значение, а ваш контроллер возвращает что-то, но не ноль? .. сначала подтвердите все 3.

Alien 25.06.2018 06:39

Ajax попадает в контроллер, и входное значение (имя пользователя) печатается как null в systemout, следовательно, не получает ожидаемого значения

kulu makani 25.06.2018 06:43

Ответ Сандип Ратор почти правильный, за исключением того, что имя параметра должно быть 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"}. Как получить значение «датский» в одиночку?

kulu makani 25.06.2018 11:23

@kulumakani привет, я обновил свой ответ, вы можете проверить это сейчас

lucumt 25.06.2018 11:28

Вам нужно поставить "," (запятая) после вашего блок успеха, иначе вы будете продолжать получать ту же ошибку на своей странице на консоли: -

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"}. Как получить значение «датский» в одиночку?

kulu makani 25.06.2018 11:19

@kulumakani, чтобы сделать это, получите / проанализируйте свой 'имя пользователя' или результат (или любое другое имя переменной, которое вы используете в ответ от контроллера) из `` данных '' в строку Json в вашей функции ajax-success, примерно так: - - успех: функция (данные) {console.info (JSON.stringify (data.result)); }

Sumit 25.06.2018 11:38

Попробуйте изменить 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;')

Другие вопросы по теме