【问题标题】:How to handle success and failure for Ajax http post with JQuery?如何使用 JQuery 处理 Ajax http post 的成功和失败?
【发布时间】:2014-03-25 00:48:16
【问题描述】:

我以这种方式使用 JQuery 2.0.3 发布 http 帖子:

    $.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数据的控制器代码是

    @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 的控制器方法之间没有区别,并且只写入没有returnstatement 的数据。您能否提出改进建议,以便发布数据的 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 String string) { 尝试 { PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(filename, true))); out.println("\n"+string); out.close(); } 捕捉(IOException e){ LOGGER.severe("IOException"); e.printStackTrace(); } LOGGER.info("收到的交易"+string); return new AccountResponse("Received transactions", "Received", "Received", "Received"); }

然后我得到响应“完成!”来自服务器(但是当我只使用一个字符串而不使用杰克逊时,我得到了“失败”的响应。

根据第二个答案更新后,这个改动好像生效了:

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

它有效。 ives 已返回String

.

【问题讨论】:

    标签: java jquery json spring jackson


    【解决方案1】:

    首先,根据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);});
    

    【讨论】:

    • 感谢您的回答。我使用 JQuery 2.0.3,我正在用这个更新答案。
    【解决方案2】:

    正如 Oleg Estekhin 的回答所述,要使用的正确属性是 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);})
         ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多