使用jQuery检查来自AJAX响应的JSON字符串

时间:2013-04-18 08:59:54

标签: jquery ajax json

我在我的联系表单上使用jQuery来构建我们正在构建的Web应用程序,我从服务器获取JSON响应:

{"success": true}

到目前为止,这是我的jQuery:

$('.contact-form').on('submit', function(e) {

            // Prevent submitting
            e.preventDefault();

            // Loading from data-* attr
            var $submit = $('#contact-submit');
            $submit.html($submit.data('text'));

            // Form data
            var form      = $(this);
            var post_url  = form.attr('action');
            var post_data = form.serialize();

            // Ajax call
            $.ajax({
                type    : 'POST',
                url     : post_url,
                data    : post_data,
                dataType: 'json',
                success: function(){

                },
                error: function(){

                }
            });

        });

我已经碰壁了,因为在“成功”jQuery方法之前我从来没有“检查过”JSON响应,有人可以帮忙解决这个问题吗?我正在寻找一种方法来检查我得到的响应,如果显示“是”,我将显示“已发送成功”消息。

3 个答案:

答案 0 :(得分:7)

成功回调会将json对象作为第一个参数,你可以在回调中使用它,如下所示

$.ajax({
    type : 'POST',
    url : post_url,
    data : post_data,
    dataType : 'json',
    success : function(data) {
        if(data.success){
            //do something if success
        }

    },
    error : function() {

    }
});

答案 1 :(得分:2)

为什么不使用例如HTTP代码200(OK)或201(Created)来回复服务器。然后在jQuery中自动落入成功参数,一切顺利。

当服务器出错时,使用例如代码422(Unprocessable Entity),然后jQuery ajax会自动出错。

如果这是不可能的,只需尝试使用JSON.parse(数据)解析并沿着树向下走。如果解析失败,则json无效。

假设Java Backend,你的回复看起来像这里描述的那样:How to send a HTTP error for a Java RESTful web service?;这实际上取决于您使用的类/框架。例如,将HttpReponse状态设置为422。

你的ajax电话看起来像是:

$.ajax({
    type    : 'POST',
    url     : post_url,
    data    : post_data,
    dataType: 'json',
    success: function(){
        // Everything went okay
    },
    statusCode: {
        422: function() {
            // Something went wrong (error in data serverside)
        }
    }
});

答案 2 :(得分:1)

以下内容应该有效:

success: function(result) {
  var thing = $.parseJSON(result.d);
  if (thing.success) {

  }
}