如果json中的结果失败,如何显示错误消息?

时间:2016-09-15 09:29:52

标签: php jquery json ajax

在Ajax中,成功部分始终执行。但如果有错误,我不想执行正常;相反,我想显示一条错误消息。如果折扣代码存在然后显示/隐藏一些div以及代码然后重定向,否则显示我们在错误div中的json响应中获得的错误消息。我怎样才能做到这一点?

这是json的回复:

 {result: "fail", msg: "Code is not valid", redirect: 0}

控制器:

 if($result == 'exp'){
  $discount_arr ['result'] = 'fail';
  $discount_arr['msg'] = 'Promotion code expired';
  $discount_arr['redirect'] = 0;
 }else{
  $discount_arr ['result'] = 'success';
  $discount_arr['msg'] = 'Valid Code';
  $discount_arr['url'] = base_url('cart');
  $discount_arr['redirect'] = 1;
 }
 echo json_encode($discount_arr);

HTML:

<div class="cart-secondary cart-discount-code">
        <label for="cart_Code">
        Discount Code </label>
        <input type="text" class="discount-code" name="cart_discountCode" id="cart_discountCode">
        <span class="error coupon-error"></span>
        <div class="confirm-coupon"></div>
        <button type="submit" value="addCoupon" name="addCoupon" id="add-coupon" onclick="checkStatus()">
        Apply </button>

的Ajax:

 function checkStatus(){
var discount_code = $(".cart-secondary .cart-discount-code .discount-code").val();

$.ajax(
{
    url     : "<?php echo base_url('cart/validate/'); ?>",
    type    : "POST",
    data    : {discount_code: discount_code} ,
    cache     : false,
    dataType:'json',
    statusCode: {
        404: function() {
          alert( "page not found" );
        }
    },
    success:function(data, textStatus, jqXHR) 
    {
        if(textStatus == 'success'){
                $('input[name=cart_discountCode]').val(discount_code);
                $('.cart-secondary .cart-discount-code-show span').html(discount_code);
                $(".cart-discount-code").fadeOut();
                $(".cart-discount-code-show").fadeIn();
                if(data.redirect){
                    window.location.reload();
                }

        }
    },
    error: function(jqXHR, textStatus, errorThrown) {
        //if fails
        console.log(errorThrown);
    }
});
}

请帮忙

3 个答案:

答案 0 :(得分:0)

只需使用else进行if比较 更新:您正在访问成功回调的错误变量。你对textStatus不感兴趣,你想要自己阅读你要归还的数据。返回的json对象保存在data变量中:

if(data.result == 'success'){
    /* ... */

}else{
    $(".error").text(data.msg);
}

答案 1 :(得分:0)

您可以在AJAX函数成功回调的data变量中访问这些信息。

像这样使用,

success:function(data, textStatus, jqXHR) 
    {
        if(data.result != 'fail'){
                $('input[name=cart_discountCode]').val(discount_code);
                $('.cart-secondary .cart-discount-code-show span').html(discount_code);
                $(".cart-discount-code").fadeOut();
                $(".cart-discount-code-show").fadeIn();
                if(data.redirect){
                    window.location.reload();
                }

        } else {
           alert(redirect.message);
           if(data.redirect==1) {
                // redirect here..
           }
        }
    }

所以使用

访问这些数据
data.message
data.redirect
data.result

通常在访问任何JavaScript对象的属性时都是如此。

答案 2 :(得分:0)

如果你到了 {结果:&#34;失败&#34;,消息:&#34;代码无效&#34;,重定向:0}在成功块中,

然后这样做

success:function(data, textStatus, jqXHR) 
    {
        if(data.result !== 'fail' && textStatus == 'success'){
                $('input[name=cart_discountCode]').val(discount_code);
                $('.cart-secondary .cart-discount-code-show span').html(discount_code);
                $(".cart-discount-code").fadeOut();
                $(".cart-discount-code-show").fadeIn();
                if(data.redirect){
                    window.location.reload();
                }

        }
    },