2016-06-19 2 views
0

У меня есть функция, как это:Ajax не умеет читать JSON POST данные

function pemeliharaan(){ 
        var petugas = document.getElementById('petugas').value; 
        $.ajax({ 
        type: "POST", 
        url: "http://localhost/sipetan/WebService/public/api/pemeliharaan", 
        data: "[{'id_petugas':'1','no_rek_pelanggan':'11111'}]", 
        dataType: "json", 
        contentType: "application/json" 
       }).done(function() { 
        alert('Pemeliharaan dikirim ke database!'); 
       }).fail(function() { 
        alert("Input yang anda masukkan salah!"); 
        var r=confirm("Ulangi?"); 
        if (r) 
        { 
         window.location = "/"; 
        } 
        else{}; 
       }); 
        } 

Но Laravel не может читать мои данные в формате JSON. Laravel вернулся:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id_pegawai' cannot be null (SQL: insert into `pemeliharaan` (`id_pegawai`, `no_rek_pelanggan`, `jenis`, `latitude`, `longitude`, `catatan`, `updated_at`, `created_at`) values (, , , , , , 2016-06-19 20:54:26, 2016-06-19 20:54:26)) 

кажется, что мои данные (id_petugas и no_rek_pelanggan) не прочитанные этой функцией.

Я пытался изменить структуру моих данных для: `

  1. {'id_petugas':'1','no_rek_pelanggan':'11111'}
  2. {'id_petugas':1,'no_rek_pelanggan':11111}
  3. [{'id_petugas':1,'no_rek_pelanggan':11111}]
  4. [{'id_petugas':'1','no_rek_pelanggan':'11111'}]

До сих пор не работал. Но когда я пытаюсь использовать клиент RESTful, он работает отлично. Вот мой Laravel контроллер:

$Pemeliharaan=new pemeliharaan; 
     $Pemeliharaan->id_pegawai=Request::input('id_petugas'); 
     $Pemeliharaan->no_rek_pelanggan=Request::input('no_rek_pelanggan'); 
     $Pemeliharaan->jenis=Request::input('jenis'); 
     $Pemeliharaan->latitude=Request::input('latitude'); 
     $Pemeliharaan->longitude=Request::input('longitude'); 
     $Pemeliharaan->catatan=Request::input('catatan'); 

     $success=$Pemeliharaan->save(); 

     if(!$success) 
     { 
      return Response::json("error saving",500); 
     }  
     return Response::json("success",201); 

EDIT

Он также прекрасно работать, когда я использовал DataForm для JSON на моей другой функции:

jQuery('form#postPemeliharaan').bind('submit', function(event){ 
       event.preventDefault(); 

       var form = this; 
       var json = ConvertFormToJSON(form); 

       var id_pemeliharaan; 
       $.each(json,function (name, value){ 
        if(name=="id_pemeliharaan"){ 
        id_pemeliharaan=value; 
        } 
       }); 

       $.ajax({ 
        type: "PUT", 
        url: "http://localhost/sipetan/WebService/public/api/pemeliharaan/"+id_pemeliharaan, 
        data: json, 
        dataType: "json" 
       }).done(function() { 
        alert('Pemeliharaan dikirim ke database!'); 
       }).fail(function() { 
        alert("Input yang anda masukkan salah!"); 
        var r=confirm("Ulangi?"); 
        if (r) 
        { 
         window.location = "/"; 
        } 
        else{}; 
       }); 

       return true; 
      }); 

EDIT 2 (Раскрыты мое проблема): Но я изменил contentType на данные формы

function pemeliharaan(){ 
       var petugas = document.getElementById('petugas').value; 
       var json = '[{"id_petugas":1,"no_rek_pelanggan":11111}]'; 
       $.ajax({ 
       type: "POST", 
       url: "http://localhost/sipetan/WebService/public/api/pemeliharaan", 
       data: [{"name": "id_petugas","value": 1},{"name": "no_rek_pelanggan","value": 11111},{"name": "longitude","value": 11111},{"name": "latitude","value": 11111},{"name": "jenis","value": 1}], 
       dataType: "json", 
       contentType: "application/x-www-form-urlencoded" 
      }).done(function() { 
       alert(petugas+' berhasil ditugaskan untuk melakukan pemeliharaan'); 
      }).fail(function() { 
       alert("Input yang anda masukkan salah!"); 
       var r=confirm("Ulangi?"); 
       if (r) 
       { 
        window.location = "/"; 
       } 
       else{}; 
      }); 
       } 
+1

Возможного дубликат: http://stackoverflow.com/a/24497091/2159528 –

ответ

1

Вы отправляете недействительный JSON. Вы можете это доказать, передав его с помощью json validator

Ваши одиночные кавычки должны быть двойными и наоборот.

Не вручную создавайте JSON.Есть методы сериализации в большинстве языков, чтобы сделать это для вас

Попробуйте

data: JSON.stringify([{'id_petugas':'1','no_rek_pelanggan':'11111'}]) 
+0

. Я решил эту проблему с типом изменения в форме-данных. См. Мое редактирование 2. Но вы - настоящий MVP для этой проблемы. Правильный - 'данные: JSON.stringify ({'id_petugas': 1, 'no_rek_pelanggan': 11111})' –

+0

Мне было интересно, почему это был массив, но из-за отсутствия лучшего понимания только что показал, как укрепить структуру, которую вы имели – charlietfl

+0

okay , Большое спасибо. Хорошего дня. Будьте здоровы! :) –

0

Незнайка, если только эти точки, но я только что заметил:

  1. В набор данных вы посылаете Laravel должны быть также маркер CSFR. Вот почему я обычно включаю это сразу после тела как скрытый ввод и использую его значение в каждом запросе ajax.

  2. Правильный формат вашей собственности DATATYPE это: { 'id_petugas': 1, 'no_rek_pelanggan': 11111}

Для остального, я бы Xdebug этого контроллера, чтобы проверить эффективные данные, полученные ,

Вы также пытались intval(), что иды?

$Pemeliharaan->id_pegawai = intval(Request::input('id_petugas')); 
+0

я был отключен CSFR маркера в любом случае. Когда я пытался использовать intval, он возвращал 0 .. –

+0

И если вы используете $ request ['id_petugas'] вместо Request :: input ('id_petugas')? Что у вас там? – Alessandro

+0

, когда я использовал $ request, возвращает laravel 'Нельзя использовать объект типа Illuminate \ Support \ Facades \ Request as array'. См. Также мое редактирование. –

Смежные вопросы