2016-04-19 5 views
0
veraltet

Ich versuche, ein senden $ http.post AJAX Daten an eine Route konfiguriert in Laravel 5.2, funktioniert alles perfekt, aber der Server gibt diesen Fehler zurück:

Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0

Warning: Cannot modify header information - headers already sent in Unknown on line 0

Das ist mein Code. PHP:

public function save(Request $request){ 
     $input = $request->all(); 
     try { 
     $direccion = urlencode($input['Calle']." ".$input['Numero'].", ".$input['Ciudad']); 

     $geocode = "https://maps.googleapis.com/maps/api/geocode/json?address=$direccion&key=APIKEY"; 
     $datosGoogle = json_decode($this->curl($geocode), true); 

     $latitud = $datosGoogle['results'][0]['geometry']['location']['lat']; 
     $longitud = $datosGoogle['results'][0]['geometry']['location']['lng']; 

     if(is_double($latitud) && is_double($latitud)){ 
      $input['Latitud'] = $latitud; 
      $input['Longitud'] = $longitud; 
      $new = MyModel::create($input); 
      $data = ["status"=>"ok", "message"=>"Agregado correctamente"]; 
     }else{ 
      $data = ["status"=>"fail", "message"=>"Dirección desconocida, compruebe que los datos son correctos para que podamos agregarla al sistema."]; 
     } 
     } catch (Exception $e) { 
     $data = ["status"=>"error", "message"=>$e->getMessage()]; 
     } 
     return response()->JSON($data); 
    } 

JS:

$scope.registrar = function(form, datos) { 
     $scope.submitted = true; 
     if(form.$valid) { 
     var toSendData = JSON.stringify({ 
      Nombre: datos.nombre, 
      Calle: datos.calle, 
      Numero: datos.numero, 
      Piso: datos.piso, 
      Puerta: datos.puerta, 
      CP: datos.cp, 
      Ciudad: datos.ciudad, 
      Email: datos.email, 
      Necesidades: datos.necesidades, 
      Telefono: datos.telefono 
     }); 
     console.log(toSendData); 
     $http.post($rootScope.recibirNuevoUrl, toSendData).then(function(response){ 
      $scope.hideLoading(); 
      if(response.data.status == "ok"){ 
      $state.go('registro'); 
      }else{ 
      $scope.$parent.showAlert("Error al introducir los datos", response.data.message); 
      } 
     }) 
     }else{ 
     $scope.$parent.showAlert('Validacion de datos', 'El formulario contiene errores. Por favor revise los campos marcados para comprobar los errores.'); 
     } 
    }; 

Wie kann ich es beheben?

Antwort

2

hatte ich das gleiche Problem mit Laravel 5.2 und Angular, ich habe es durch die Arbeit einer einzige Zeile in meinem Controller hinzufügen:

editorApp.controller('EditorCtrl', function ($scope, $sce, $http, $location, $interval, $document){ 

    $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; 

    ... 

ich diese Arbeit für mich in diesem Beitrag nicht gefunden: https://stackoverflow.com/a/19254137/4021927. Die als richtig markierte Antwort funktionierte für mich nicht, die obige Zeile stammt von einer anderen Antwort im selben Beitrag. Die richtige Antwort (https://stackoverflow.com/a/20276775/4021927) sagt Ihnen, warum Sie es brauchen.

Kurz gesagt, warum dieses Problem besteht, ist weil Angular (Standardmäßig) senden Daten mit JSON-Serialisierung: Content-Type: application/json und PHP JSON nativ nicht unserialisiert.

foo=bar&bar=foo 

statt (JSON):

{ "foo": "bar", "bar": "foo" } 
+0

Sie regeln !!! Ich hatte tausend Beiträge und Webs für diese Lösung. Kannst du ein bisschen deine Lösung erklären (denk an neue Leute, die hier mit demselben Problem ankommen)?Tausend Dank! –

0

Ich habe ähnliches Problem Abrufen von $ GLOBALS [ 'HTTP_RAW_POST_DATA'] in Laravel 5.2 Durch die Änderung wird Content-Type auf x-www-form-urlencoded die Daten als gesendet werden. Ich löste das Problem, indem Request::getContent() in meinem Controller

0

Got Mine mit zu arbeiten, nachdem

  1. öffnen php.ini error_reporting in der php.ini ausgeschaltet
  2. Suche nach error_reporting
  3. ändert es => error_reporting = E_ALL & ~ E_DEPRECATED & ~ E_STRICT
  4. Beenden und Start/Neustart apache-Server
  5. Restart larave l-Server
+0

Das ist keine Lösung, Sie verstecken nur das eigentliche Problem. –

+0

Sie haben recht, aber wenn die empfohlene Lösung nicht funktioniert und Sie Fristen einhalten müssen, können Sie Ihre App zum Laufen bringen, während Sie weiterhin nach einer dauerhaften Lösung suchen. –

+0

Die vorgeschlagene Lösung funktionierte perfekt für mich –

0

Laravel 5,2

/resource/assets/js/bootstrap.js

window.axios = require('axios'); 
 
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = window.Laravel.csrfToken; 
 
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 
 
//add default Content-Type 
 
window.axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

2 Datenstring mast

const qs = require('qs') 
 
axios.post('/api/code/create', qs.stringify(this.formItem),) 
 
    .then(function (response) { 
 
     console.log(response) 
 
    }) 
 
    .catch(function (error) { 
 
     console.log(error) 
 
    })
sein