java - 如何使用 JQuery 处理 Ajax http post 的成功和失败?

标签 java jquery json spring jackson

我用 JQuery 2.0.3 这样做了一个 http post:

    $.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:failure: 未启用 AFAIK。接收json数据的 Controller 代码为

    @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成功接收或提交失败的回调?它可以提交数据,但来自服务器的响应“已接收 JSON 数据”不会执行任何操作,这与 void 的 Controller 方法没有区别并且只写入数据,没有return语句。您能否提出改进建议,以便发布数据的 JavaScript 也能收到响应,如果出现服务器错误,我认为该响应将是状态 200 OK 或状态 500 或类似的响应?

根据@Oleg Etekhin 的回答,它应该更像这样:

    $.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 将 Controller 代码更改为响应对象

@RequestMapping(value = "/submitTransactions2", method = RequestMethod.POST, headers = {"content-type=application/json"}) @ResponseBody @事务性 public AccountResponse SubmitTransactions2(@RequestBody @Valid Final String string) { 尝试 { PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(文件名, true))); out.println("\n"+字符串); 关闭(); } catch (IOException e) { LOGGER.severe("IOException"); e.printStackTrace(); } LOGGER.info("收到的交易"+string); return new AccountResponse("已收到交易", "已收到", "已收到", "已收到"); }

然后我得到回复“完成!”来自服务器(但当仅使用字符串而不使用 jackson 时,我得到响应“失败”。

enter image description here

根据第二个答案更新后,此更改似乎有效:

    $.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);});

它有效。 enter image description here ives 返回了String

.

最佳答案

首先,根据 jQuery ajax文档中包含失败回调的属性称为“错误”,因此您的示例应如下所示:

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

其次,自 jQuery 1.8 起,“成功”、“错误”和“完成”回调被视为已弃用,您应该使用 Promise 风格的变体:

$.ajax({
    // other properties
})
.done(function(data){alert(data);})
.fail(function(errMsg) {alert(errMsg);});

关于java - 如何使用 JQuery 处理 Ajax http post 的成功和失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21969429/

相关文章:

jquery - 使用 jQuery 插件进行渐变,添加类以创建悬停效果导致跳转文本

JavaScript 不显示剩余字符,但可以在其他页面上运行

javascript - 如何使用 Apigee Edge 政策进行 JSON 架构验证?

java - 将字符串解析为模式为 :"dd/MM/yyyy"的日期

java - 如何在多个字段上过滤搜索查询?

javascript - 从输入复制文本按钮

javascript - 将 php 关联数组转换为字符串时遇到问题

Python - 将目录结构表示为 JSON 并读取每个文件的内容

java - 模式匹配 - Java 中的正则表达式

java - JPA:自己的注释来为具有相同值的字段捆绑注释