我是Laravel和Lumen框架的新手。我正在使用流明做我的第一个项目。我正在尝试从angular
创建一个API调用这是我的角度代码:
app.controller('ListCtrl', ['$scope', '$http', '$location', '$window', function($scope, $http, $location, $window) {
$scope.data = {};
$scope.getdata = function() {
$scope.datas = [];
$headers = {
'Access-Control-Allow-Origin' : '*',
'Access-Control-Allow-Methods' : 'POST, GET, OPTIONS, PUT',
'Content-Type': 'application/json',
'Accept': 'application/json'
};
$http({
url: "http://localhost/service/public/getdata/",
method: "GET",
params: {'place':$scope.data.place,'pincode':$scope.data.pincode},
headers: $headers
})
.success(function(data,status,headers,config) {
$scope.datas=JSON.stringify(data);
console.log($scope.datas);
$scope.navig('/show.html');
})
.error(function(){
alert("failed");
});
};
$scope.navig = function(url) {
$window.location.href = url;
};
}]);
这是我的流明 route.php:
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
$app->get('/', function () use ($app) {
return $app->version();
});
$app->get('getdata','App\Http\Controllers\PlaceController@index');
这是 PlaceController.php
<?php
namespace App\Http\Controllers;
use App\Places;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class PlaceController extends Controller
{
public function __construct()
{
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
//header("Access-Control-Allow-Origin: http://localhost:8100");
}
public function index()
{
$places = Place::all();
return response()->json($places);
}
}
但它显示&#34; XMLHttpRequest无法加载http://localhost/service/public/getdata/?place=sdfs。预检的响应无效(重定向)&#34; console.log中的错误。
我用Google搜索了两天,但无法找到解决方案。
请帮忙
答案 0 :(得分:1)
由于请求中的标头无效/不正确,您可能会遇到问题。 PlaceController
似乎允许的唯一标头类型是Content-Type
,但您发送的内容不止这些。
此外,Access-Control-Allow-Origin
和Access-Control-Allow-Methods
标题应添加到您的请求的服务器响应中,而不是添加到请求本身。
从MDN,跨网站请求(似乎是您的情况)必须满足以下条件:
- 唯一允许的方法是:
- GET
- HEAD
- POST
- 除了用户代理自动设置的标头(例如Connection,User-Agent等)外,唯一允许手动设置的标头是:
- 接受
- 接受语言
- 内容的语言
- 内容类型
- Content-Type标头唯一允许的值是:
- 应用程序/ x-WWW窗体-urlencoded
- 的multipart / form-data的
- 文本/纯
注意:我从未使用过Laravel或Lumen,但在我的情况下,如果我没有正确设置标题,我最终会遇到相同的response for preflight is invalid (redirect)
错误。