Ошибка при разборе Json данных из Ajax запроса - PullRequest
0 голосов
/ 06 марта 2020

Я не новичок в ajax, но здесь я сталкиваюсь с очень странной проблемой, я использую платформу codeigniter. Я пытаюсь сделать запрос из представления, используя ajax jquery с этим кодом ниже:

$("#form_tambah_skko").parsley();
    $("#form_tambah_skko").on('submit', function(event) {
            // validate form with parsley.
            $(this).parsley().validate();

            // if this form is valid
            if ($(this).parsley().isValid()) {
                // show alert message
                $('#btnSave').text('menyimpan...'); //change button text
                $('#btnSave').attr('disabled',true); //set button disable 

                var url;
                url = "<?php echo site_url('dataskko/ajax_add')?>";
                $('#loading_').show();

                // ajax adding data to database
                $.ajax({
                    url : url,
                    type: "POST",
                    data: $('#form_tambah_skko').serialize(),
                    success: function(data)
                    {
                        if(data.status) //if success close modal and reload ajax table
                        {   
                            $('#btnSave').text('simpan');
                            $('#btnSave').attr('disabled',false);
                            $('#form_tambah_skko')[0].reset();
                            $('#loading_').hide();
                            swal('Ok!', 'Data SKKO Berhasil diinput!', 'success');

                            window.location.replace("<?php echo site_url('admin/skko/pagu') ?>");
                        }
                        else
                        {
                            alert("gagal input data");

                            for (var i = 0; i < data.inputerror.length; i++) 
                            {
                                $('[name="'+data.inputerror[i]+'"]').parent().parent().addClass('has-error'); //select parent twice to select div form-group class and add has-error class
                                $('[name="'+data.inputerror[i]+'"]').next().text(data.error_string[i]); //select span help-block class set text error string
                            }
                        }
                        $('#btnSave').text('save'); //change button text
                        $('#btnSave').attr('disabled',false); //set button enable 
                    },
                    error: function (jqXHR, textStatus, errorThrown)
                    {
                        swal("Oops", "No SKKO tidak boleh sama!", "error");

                        console.log(jqXHR.status);
                        console.log(jqXHR.responseText);
                        console.log(errorThrown);

                        $('#btnSave').text('simpan');
                        $('#btnSave').attr('disabled',false); //set button enable 

                    }
                });
            }

            // prevent default so the form doesn't submit. We can return true and
            // the form will be submited or proceed with a ajax request.
            event.preventDefault();
        });

, и это мой контроллер

public function ajax_add_murni()
    {
        header("Content-Type: application/json; charset=utf-8");
        date_default_timezone_set('Asia/Kuala_Lumpur');

        $pagu_ao = preg_replace('/\,/', '', $this->input->post('ao_pagu'));
        $ao_now = $this->input->post('sisa_ao1');

        //if ($ao_now/$pagu_ao < 0.1) {
        if($this->config->item('send_mail')) $this->kirim_email();
        //} 

        // $tgl_kontrak = $this->input->post('tanggal_kontrak');
        $no_kontrak = ltrim($this->input->post('no_kontrak'));

        $jml2 = preg_replace('/\,/', '', $this->input->post('nilai_kontrak'));

        $data = array(
                'no_skko'  => $this->input->post('no_skko'),
                'no_kontrak'         => $no_kontrak,
                'tgl_awal'         => $this->input->post('tanggal_awal_kontrak'),
                'tgl_akhir'         => $this->input->post('tanggal_akhir_kontrak'),
                // 'tgl_kontrak'         => $tgl_kontrak,
                'uraian_kegiatan'         => $this->input->post('kegiatan'),
                'nilai_kontrak'         => $jml2,
                'saldo_kontrak'         => $jml2,
                'file_kontrak'    => $this->input->post('encrypted_file'),
                'jaminan_bank'    => $this->input->post('encrypted_file2'),
                'jenis'    => $this->input->post('jenis'),
                'id_vendor'    => $this->input->post('id_vendor'),
                'id_bank'    => $this->input->post('id_bank_tujuan'),
                'no_rekening'    => $this->input->post('no_rekening'),
                'pemilik_rekening'    => $this->input->post('pemilik_rekening'),
                'tgl_create'    => date('Y-m-d H:i:s'),
                'creator' => $this->input->post('_creator')
            );

        $data2 = array(
                'id_skko'  => $this->input->post('id_skko'),
                'ao_terkini'  => $this->input->post('sisa_ao1')
            );

        if($this->cek_no_kontrak($no_kontrak) >= 1){
            echo json_encode(array('status_post' => "kontraksama", "message" => "nomor kontrak sudah pernah ada"));
        }else{
            if(($this->kontrak_model->save($data)) && ($this->dataskko_model->update(array('id_skko' => $this->input->post('id_skko')), $data2))){
                echo json_encode(array("status_post" => TRUE));
            } else{
                echo json_encode(array("status_post" => FALSE));
            }
        }

    }

и здесь Это ответ, который я получил, он всегда добавляет дополнительный массив {"status":null} в начале индекса массива, я уверен, что этот первый индекс, имеющий нулевое значение, которое вызывает json, не удалось проанализировать. Но я не знаю, как это получить. Любая помощь будет оценена. Спасибо

Status: 200
ResponseTest: {"status":null}{"status_post":"kontraksama","message":"nomor kontrak sudah pernah ada"}
SyntaxError: Unexpected token { in JSON at position 15
    at JSON.parse (<anonymous>)
    at n.parseJSON (jquery.min.js:4)
    at Xb (jquery.min.js:4)
    at y (jquery.min.js:4)
    at XMLHttpRequest.c (jquery.min.js:4)

1 Ответ

0 голосов
/ 06 марта 2020

Похоже, где-то еще в вашем PHP коде (на стороне сервера) строка JSON уже отображалась ранее. Поиск оператора echo между началом site_url('dataskko/ajax_add') и фактическим вызовом public function ajax_add_murni().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...