json中发送的数据在发送时会发生变化

时间:2018-02-06 08:20:09

标签: php json ajax codeigniter

$.ajax({
                type : 'POST',
                url  : '<?=site_url("aplikasi_tambah_merchant/input_merchant/get_mdr_master");?>',
                data : 'kode='+arr_value[0],
                beforeSend:function(){
                    $('#ajax-loader').show();
                },
                error: function(){
                    $('#ajax-loader').hide();
                    alert('Error\nGagal request data');
                },
                success: function(data){
                    var res = JSON.parse(data);
                    datamdr = Number(res.mdr_debit);
                    $('#ajax-loader').hide();
                    }
                });

                $.ajax({
                    type : 'POST',
                    url  : '<?=site_url("pameran/update_mdr_pameran");?>',
                    data : 'datamdr='+datamdr+'&app_id='+app_id+'&on_off=2',
                    beforeSend:function(){
                        $('#ajax-loader').show();
                    },
                    error: function(){
                        $('#ajax-loader').hide();
                        alert('Error\nGagal request data');
                    },
                    success: function(data){
                        alert("tes "+datamdr);
                        alert("balik "+data);
                        $('#ajax-loader').hide();
                        }
                    });

这是发送我的数据的ajax代码。 第一个ajax是获取datamdr = Number(res.mdr_debit);的值,然后我再次将datamdr值发送到控制器,但是在控制器中

public function update_mdr_pameran() {
        $this->config->set_item('compress_output', FALSE);
        $datamdr = trim($this->input->post('datamdr'));
        $app_id = trim($this->input->post('app_id'));
        $on_off = trim($this->input->post('on_off'));

        $out = $this->aplikasi_model->update_mdr_app_id_onoff($datamdr, $app_id, $on_off);

        echo json_encode($datamdr);
    }

那些datamdr值是未定义的,而另外2个变量仍然可以读作字符串?这怎么可能?我已经尝试将第一个json解析为string和int但仍然没有运气再次发送数据

2 个答案:

答案 0 :(得分:4)

默认情况下,Ajax异步工作,所以发生的情况是,您的请求同时执行,此时,您在完成第一个ajax调用时设置的值仍未定义。

您应该在函数中包装第二个ajax调用,并在第一个ajax调用中从success处理程序调用它。

或者您将两个请求组合在一起,因为它们似乎以任何方式转到同一台服务器。

第三个选项是使ajax调用同步,但这会阻止脚本的执行,所以我不建议这样做。

答案 1 :(得分:0)

@jeroen建议的是:

$.ajax({
    type : 'POST',
    url  : '<?=site_url("aplikasi_tambah_merchant/input_merchant/get_mdr_master");?>',
    data : 'kode='+arr_value[0],
    beforeSend:function(){
        $('#ajax-loader').show();
    },
    error: function(){
        $('#ajax-loader').hide();
        alert('Error\nGagal request data');
    },
    success: function(data){
        var res = JSON.parse(data);
        datamdr = Number(res.mdr_debit);
        $('#ajax-loader').hide();

        update_mdr_pameran();
    }
});

function update_mdr_pameran(){
    $.ajax({
        type : 'POST',
        url  : '<?=site_url("pameran/update_mdr_pameran");?>',
        data : 'datamdr='+datamdr+'&app_id='+app_id+'&on_off=2',
        beforeSend:function(){
            $('#ajax-loader').show();
        },
        error: function(){
            $('#ajax-loader').hide();
            alert('Error\nGagal request data');
        },
        success: function(data){
            alert("tes "+datamdr);
            alert("balik "+data);
            $('#ajax-loader').hide();
            }
    });
}