我正在尝试将$ http.post AJAX数据发送到Laravel 5.2中配置的路由,一切正常,但服务器返回此错误:
不推荐使用:不推荐自动填充$ HTTP_RAW_POST_DATA 并将在以后的版本中删除。要避免此警告设置 在php.ini中'always_populate_raw_post_data'为'-1'并使用 php://改为输入流。在第0行的未知中
警告:无法修改标头信息 - 已发送的标头 第0行未知
这是我的代码。 PHP:
main()
JS:
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);
}
我该如何解决?
答案 0 :(得分:2)
我在Laravel 5.2和Angular上遇到了同样的问题,我通过在控制器中添加一行来实现它:
editorApp.controller('EditorCtrl', function ($scope, $sce, $http, $location, $interval, $document){
$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
...
我在这篇文章中发现这对我有用:https://stackoverflow.com/a/19254137/4021927。标记为正确的答案对我不起作用,上面的一行来自同一篇文章中的另一个答案。正确答案(https://stackoverflow.com/a/20276775/4021927)会告诉您为什么需要它。
简而言之,为什么存在这个问题是因为Angular(默认情况下)使用JSON序列化发送数据:Content-Type: application/json
并且PHP本身不会反序列化JSON。通过将内容类型更改为x-www-form-urlencoded
,数据将按以下方式发送:
foo=bar&bar=foo
代替(JSON):
{ "foo": "bar", "bar": "foo" }
答案 1 :(得分:0)
我在Laravel 5.2中检索$ GLOBALS ['HTTP_RAW_POST_DATA']时遇到了类似的问题。我在控制器中使用Request::getContent()
解决了这个问题
答案 2 :(得分:0)
在php.ini
中关闭error_reporting后我的工作正常答案 3 :(得分: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 data mast be string
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)
})