Как справиться с успехом и неудачей для Ajax http сообщения с JQuery?

0

Я делаю сообщение http с JQuery 2.0.3 следующим образом:

    $.ajax({
        type: "POST",
        url: "/demo/submitTransactions",
        data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data){alert(data);},
        failure: function(errMsg) {
            alert(errMsg);
        }
    });

Json отправляется и записывается на сервере, но success: ответа success: и failure: не включены AFAIK. Код контроллера, который получил json-данные,

    @RequestMapping(value = "/submitTransactions", method = RequestMethod.POST, headers = {"content-type=application/json"})
    @ResponseBody
    @Transactional
    public String submitTransactions(@RequestBody @Valid final String string) {
        try {
            PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(filename, true)));
            out.println("\n"+string);
            out.close();
        } catch (IOException e) {
            LOGGER.severe("IOException");
            e.printStackTrace();
        }
        LOGGER.info("Received transactions "+string);
        return "Received JSON data";
    }

Как я могу также сделать успех и неудачу получить обратный вызов, что отправленный json был успешно получен или не был отправлен? Он работает для отправки данных, но ответ с сервера "Received JSON data" ничего не делает, и нет никакой разницы между этим и методом контроллера, который является void и просто записывает данные без оператора return. Можете ли вы предложить улучшение, чтобы javascript, который размещает данные, также получает ответ, который, я полагаю, будет либо статусом 200 OK, либо, возможно, статусом 500 или подобным, если была ошибка сервера?

Согласно ответу @Oleg Estekhin, это должно быть примерно так:

    $.ajax({
        type: "POST",
        url: "/demo/submitTransactions",
        data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }),
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    })
            .done(function(data){alert('Done!'+data);})
            .fail(function(errMsg) {alert('Failure!'+errMsg);});

Теперь, если я также изменю код контроллера на объект ответа, используя jackson

@RequestMapping (value = "/submitTransactions2", method = RequestMethod.POST, headers = {"content-type = application/json"}) @ResponseBody @Transactional public AccountResponse submitTransactions2 (@RequestBody @Valid final Строка строки) {try {PrintWriter out = new PrintWriter (новый BufferedWriter (новый FileWriter (имя файла, true))); out.println("\n"+string); out.println( "\ п" +string); out.close(); out.close(); } catch (IOException e) { LOGGER.severe("IOException"); } catch (IOException e) {LOGGER.severe("IOException"); e.printStackTrace(); e.printStackTrace(); } LOGGER.info("Received transactions "+string); } LOGGER.info("Полученные транзакции" +string); вернуть новый AccountResponse ("Полученные транзакции", "Получено", "Получено", "Получено"); }

Затем я получаю ответ "Готово!". с сервера (но я получаю ответ "сбой" при использовании только строки и без джексона.

Изображение 174551

После обновления в соответствии со вторым ответом это изменение работает:

    $.ajax({
        type: "POST",
        url: "/demo/submitTransactions",
        data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }),
        contentType: "application/json; charset=utf-8",
        dataType: "text"
    })
            .done(function(data){alert('Done!'+data);})
            .fail(function(errMsg) {alert('Failure!'+errMsg);});

Оно работает. Изображение 174551 ives tha возвратил String

,

Теги:
spring
jackson

2 ответа

1
Лучший ответ

Как указано в ответе Олега Эстехина, правильная собственность для использования - это error. Также вы должны использовать варианты обещаний:

$.ajax({ ... })
 .done(...)
 .fail(...);

Затем вы должны изменить dataType на text чтобы jQuery знал, что возвращаемое значение должно анализироваться как обычный текст, а не как JSON. Это приведет к вызову обратного вызова успеха. Окончательный код будет выглядеть следующим образом:

    $.ajax({
        type: "POST",
        url: "/demo/submitTransactions",
        data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }),
        contentType: "application/json; charset=utf-8",
        dataType: "text"
    })
     .done(function(data){alert(data);})
     .fail(function(errMsg) {alert(errMsg);})
     ;
2

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

$.ajax({
    // other properties
    success: function(data){alert(data);},
    error: function(errMsg) {alert(errMsg);}
});

Во-вторых, "успешный", "ошибочный" и "полный" обратные вызовы считаются устаревшими с jQuery 1.8, и вы должны использовать варианты в стиле обещаний:

$.ajax({
    // other properties
})
.done(function(data){alert(data);})
.fail(function(errMsg) {alert(errMsg);});
  • 0
    Спасибо за ответ. Я использую JQuery 2.0.3, и я обновляю ответ этим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню