0

我使用 $.ajax 检查控制器上的数据。如果在我放入数组进行 json 编码的变量之前没有任何进程,它工作正常。控制器回显数据,但视图不会将其呈现为 json 编码数据。控制器:

public function redeem($item){
    $this->load->model('point_model');
    $cost = 0;
    switch($item){
        case 'umbrella':
            $cost = 100;
            break;
        case 'jacket':
            $cost = 200;
            break;
        case 'mug':
            $cost = 50;
            break;
    }
    $tixD = $this->point_model->getTicks($_SESSION['playerID']);
    $tix = $tixD[0]->pticks;
    if($tix < $cost){
        $this->load->model('prize_model');
        $this->prize_model->setPrize($item,$_SESSION['playerID']);
        $newTix = $tix - $cost;
        $yes = $this->point_model->updateTicks($newTix,$_SESSION['playerID']);
        if($yes){
            $message = 'Ready to redeem your '.$item;
            $code = 900;
        }
    }else{
        $message = 'Insufficient tickets.';
        $code = 911;
    }
    $echo = array('message'=>$message,'code'=>$code);
    header('Content-Type: application/json',true);
    echo json_encode($echo);
}

编辑:将数组上的 $yes 更改为 $message

jquery 在我看来:

$('.jacket-btn').click(function(){
        $.ajax({
            url: '<?php echo base_url('store/jacket'); ?>',
            method: 'POST',
            dataType: 'json',
            success: function(res){
                    console.log(res);
                    modal = $('#instructions .modal-body');
                    var child = '<span class = "note">'+res.message+'</span>';
                    modal.removeClass('instructions-content').addClass('notif');
                    $('.notif').append(child);
                    $('#instructions').modal('show');
            }
        });
    });

如您所见,我使用了 dataType: json 以及 json_encode 但如果变量来自变量之前没有进程的 else 块,我只会得到 json 对象。为什么它只有在变量之前没有过程的情况下才有效?是因为我的模特回归吗?

4

2 回答 2

0

好的,我知道了。

'{"message":"Ready to redeem your mug","code":900}'是正确的 JSON 字符串,但是您需要本机 js 对象,而不是 json,是吗?

我认为您的问题在这里: $.ajax 无论如何都不会处理响应如果您需要本机 JS 对象,请使用:

try{
  var result = JSON.parse(res);
} catch(e) {console.error(e); }
console.log(result);

我不知道你的 res 中的什么会导致 console.log(res) 崩溃,想想在其他地方解析错误

于 2013-10-09T03:19:02.240 回答
0

可能是因为你的控制器功能需要使用 json 输出的 CI 方式:

public function redeem($item){
$this->load->model('point_model');
$cost = 0;
switch($item){
    case 'umbrella':
        $cost = 100;
        break;
    case 'jacket':
        $cost = 200;
        break;
    case 'mug':
        $cost = 50;
        break;
}
$tixD = $this->point_model->getTicks($_SESSION['playerID']);
$tix = $tixD[0]->pticks;
if($tix < $cost){
    $this->load->model('prize_model');
    $this->prize_model->setPrize($item,$_SESSION['playerID']);
    $newTix = $tix - $cost;
    $yes = $this->point_model->updateTicks($newTix,$_SESSION['playerID']);
    if($yes){
        $message = 'Ready to redeem your '.$item;
        $code = 900;
    }
}else{
    $message = 'Insufficient tickets.';
    $code = 911;
}
$echo['message'] = $message;
$echo['code'] = $code;

$this->output
->set_content_type('application/json')
->set_output(json_encode($echo));   
}

不确定,寿。

于 2013-10-08T22:46:11.850 回答