预检的响应无效(重定向)错误

时间:2016-03-07 10:48:44

标签: php angularjs http laravel lumen

我是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搜索了两天,但无法找到解决方案。

请帮忙

1 个答案:

答案 0 :(得分:1)

由于请求中的标头无效/不正确,您可能会遇到问题。 PlaceController似乎允许的唯一标头类型是Content-Type,但您发送的内容不止这些。

此外,Access-Control-Allow-OriginAccess-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)错误。