【问题标题】:ajax request in extjs always executes successextjs中的ajax请求总是执行成功
【发布时间】:2011-07-01 20:58:05
【问题描述】:

我有一个 ajax 请求,我有成功和失败的代码

success: function(my_response) {
},
failure: function(my_response) {
}

我在服务器中使用 Perl CGI 来处理 Ajax 请求,当失败时它会在字符串下方打印

print "Content-type: text/plain\n\n";
print "{success: false, errors: {response: 'Query Failed -- Please check the syntax'}}";
exit

在萤火虫中,我可以看到上述响应。但是,我的浏览器总是成功执行代码。我处理 ajax 请求的方式有什么问题吗?

【问题讨论】:

    标签: javascript ajax perl extjs cgi


    【解决方案1】:

    您正在发送带有状态码 200 的 JSON 消息,这被视为成功。这个 JSON 消息包含一些带有错误消息的自定义结构这一事实不是 extjs 能够知道的。您可以从服务器发送 500 HTTP 状态代码,也可以在成功处理程序中简单地使用 if 条件,如下所示:

    success: function(my_response) {
       if (my_response.success) {
           alert('it worked!');
       } else {
           alert('oops, something went wrong: ' + my_response.errors.response);
       }
    }
    

    还要根据您实际发送的内容重新调整内容类型:

    print "Content-Type: application/json\n\n";
    

    【讨论】:

    • @Darin Dimitrov,您的成功处理程序缺少对 Ext.util.JSON.decode() 的调用以解码来自服务器的响应。上面的代码会坏掉。
    • @Jaitsu,哦,是的,我虽然基于内容类型 extjs 会自动执行此操作(就像 jquery 一样)。请随时更新我的​​答案并包含这些有价值的信息。
    • Ext 不仅能够破译 JSON 中的状态码,而且 JsonReader 类专门设计用于通过 successProperty 配置来实现。 500 响应(服务器错误)不同于 200 响应成功:false(服务器正常,但响应中的验证错误)。
    • 如 Jaitsu 所述,如果您手动处理响应,则必须先对其进行解码(Ext.util.JSON.decode 可以工作)。如果您通过 Ext 为您提供的存储/代理/阅读器基础设施,那么 JsonReader 将自动为您处理。
    猜你喜欢
    • 2017-08-17
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2016-06-07
    • 2021-10-09
    • 1970-01-01
    相关资源
    最近更新 更多