2016-06-19 7 views
0

Ich habe eine Funktion wie folgt aus:Ajax lesen können JSON POST Daten nicht

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

Aber Laravel nicht meine JSON-Daten lesen kann. Laravel zurückgegeben:

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

es scheint, dass meine Daten (id_petugas und no_rek_pelanggan) werden von dieser Funktion nicht von mir gelesen.

Ich war die Struktur meiner Daten versucht Änderung: `

  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'}]

Immer noch nicht gearbeitet. Aber wenn ich RESTful Client benutze, funktioniert es perfekt. Hier ist mein Laravel Controller:

$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

Es ist auch perfekt funktionieren, wenn ich Datenform zu JSON auf meiner anderen Funktion verwendet:

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 (meinen eigenen Gelöst Problem): Aber ich änderte den contentType zu Formulardaten

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

Mögliche doppelte Versuchen: http://stackoverflow.com/a/24497091/2159528 –

Antwort

1

Sie senden ungültiges JSON. Sie können dies beweisen, indem Sie es durch einen Json-Validator

übergeben. Ihre einfachen Anführungszeichen sollten verdoppelt werden und umgekehrt.

Erstellen Sie JSON nicht manuell.Es gibt Serialisierungsmethoden in den meisten Sprachen, es zu tun für Sie

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

Ich habe dieses Problem mit Änderungstyp in Form-Daten gelöst. Siehe meine Bearbeitung 2. Aber du bist der wahre MVP für dieses Problem. Der richtige ist 'data: JSON.stringify ({'id_petugas': 1, 'no_rek_pelanggan': 11111})' –

+0

Ich habe mich gefragt, warum es Array war, aber aus Mangel an besserem Verständnis zeigte nur, wie man Struktur string Sie hatten – charlietfl

+0

in Ordnung . Vielen Dank. Einen schönen Tag noch. Gott segne dich! :) –

0

weiß nicht, ob dies die einzigen Punkte, aber ich habe gerade bemerkt:

  1. im Datensatz Sie Laravel senden muss auch die CSFR Token sein. Deshalb füge ich das normalerweise nach dem Körper als versteckte Eingabe hinzu und benutze es in jeder Ajax-Anfrage.

  2. Das richtige Format Ihrer Eigenschaft Datatype ist dies: { 'id_petugas': 1, 'no_rek_pelanggan': 11111}

Im übrigen würde ich diesen Controller XDebug die effektiven Daten zu überprüfen empfangen .

Haben Sie auch versucht, intval() das IDs?

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

i sowieso deaktiviert CSFR Token war. Als ich versuchte, intval zu verwenden, gab es 0 zurück. –

+0

Und wenn Sie $ request ['id_petugas'] anstelle von Request :: input ('id_petugas') verwenden? Was hast du da? – Alessandro

+0

Wenn ich $ Anfrage verwendet habe, hat die Laravel zurückgegeben 'Kann Objekt des Typs Illuminate \ Support \ Facades \ Request as array' nicht verwenden. Siehe meine Bearbeitung auch –