2016-06-19 43 views
0

我有這樣的函數:阿賈克斯無法讀取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)不受該功能readed。

我試圖改變我的數據的結構:`

  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); 

編輯

它也很好地工作時,我使用的數據形以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驗證程序

你的單引號應該是雙打,反之亦然。

不要手動創建JSON。有序列化方法在大多數語言來爲你做它

嘗試

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

我已經解決了這個問題,改變類型爲表單數據。看看我的編輯2.但你是這個問題的真正MVP。正確的是'data:JSON.stringify({'id_petugas':1,'no_rek_pelanggan':11111})' –

+0

我想知道爲什麼它是數組,但由於缺乏更好的理解,只是展示瞭如何對結構進行字符串化處理,具有 – charlietfl

+0

好嗎。非常感謝你。祝你今天愉快。上帝祝福你! :) –

0

說不上來,如果這些是唯一的點,但我只注意到:

  1. 在數據集中發送到Laravel必須有也捷克斯洛伐克令牌。這就是爲什麼我通常將這個主體作爲一個隱藏的輸入包含在其中,並在每個ajax請求中使用它的值。

  2. 你的類型屬性的正確格式是這樣的:{ 'id_petugas':1, 'no_rek_pelanggan':11111}

至於其他,我將Xdebug的是控制器檢查收到的有效數據。

你有沒有嘗試過intval()那個ID?

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

我是殘疾人CSFR令牌反正。當我嘗試使用intval它返回0 .. –

+0

如果您使用$ request ['id_petugas']而不是Request :: input('id_petugas')?你在那裏? – Alessandro

+0

當我使用$請求laravel返回'不能使用類型照明\ Support \ Facades \ Request作爲數組'的對象。請參閱我的編輯 –