2015-09-06 77 views
1

問題

當我嘗試發佈的數據,我得到的錯誤。當然,我做錯了什麼,也是即時新的角度。當我做得很好,但我不知道如何做POST。

控制器

myApp.controller('createListController', ['$scope', '$log', '$http', 
    function($scope, $log, $http){ 
     $http({ 
      method: 'POST', 
      url: 'http://localhost:8888/lists', 
      data: $scope.name 
     }) 
    }]); 

HTML

<form method="post" action="" > 
    <label>List name</label> 
    <input type="text" ng-model="name" name="name" class="form-control" placeholder="Type list name" /> 
    <button type="submit" ng-model="submit" name="submit" class="btn btn-primary form-control">Add list</button> 
</form> 

Laravel rout.php

Route::group(['middleware' => 'cors'], function() { 
    Route::get('lists', '[email protected]'); 
    Route::post('lists', '[email protected]'); 
}); 

Laravel中間件

class Cors 
{ 
    public function handle($request, Closure $next) 
    { 
     $response = $next($request); 
     $response->headers->set('Access-Control-Allow-Origin', '*'); 
     $response->headers->set(
      'Access-Control-Allow-Headers', 
      'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since' 
     ); 
     $response->headers->set('Access-Control-Allow-Credentials', 'true'); 
     $response->headers->set('Access-Control-Allow-Methods', '*'); 
     return $response; 
    } 
} 

Laravel kernel.php

protected $routeMiddleware = [ 
     'cors' => \App\Http\Middleware\Cors::class, 
    ]; 
} 

嘗試與

myApp.controller('createListController', ['$scope', '$log', '$http', 
    function($scope, $log, $http){ 
     if ($scope.submit == true){ 

     $http({ 
      method: 'POST', 
      url: 'http://localhost:8888/lists', 
      data: {name: 'text'} 
     }) 

     .success(function() { 
      console.log('true'); 

     }) 
     .error(function(){ 
      console.log('false'); 
     }) 
     } 

    }]); 

解決,但它不工作了。我不知道我做錯了,如何發佈數據的權利..

錯誤消息從控制檯

錯誤:XMLHttpRequest的無法加載本地主機:8888 /列表。請求的資源上沒有「Access-Control-Allow-Origin」標題。 Origin'localhost';因此不被允許訪問。

問題

如何解決這個錯誤,並得到角JS $ HTTP POST與laravel?

我的意見

我覺得有什麼不對的角度控制器,它不能從形式或類似的東西,也許數據。

+1

你得到的錯誤是什麼? –

+0

只是說,你應該把你的實際http請求放在服務/工廠中,然後在你的控制器中調用它 –

+0

控制檯出錯: XMLHttpRequest無法加載http:// localhost:8888/lists。請求的資源上沒有「Access-Control-Allow-Origin」標題。因此不允許Origin'http:// localhost'訪問。 false – rincuuk

回答

1

解決方案

我用我自己得到了解決。 在第一次使我的角度控制器正常工作:

myApp.controller('createListController', ['$scope', '$log', '$http', 
    function($scope, $log, $http){ 

      $scope.addList = function() { 
      var list = { 
       name: $scope.listname 
      }; 

     $http({ 
      method: 'POST', 
      url: 'http://localhost/anydocopy/public/lists', 
      data: list 
     }) 

      .success(function() { 
       console.log('true'); 
      }) 
      .error(function(){ 
       console.log('false'); 
      }) 
    } 

    }]); 

在第二個我設置NG-模型參數輸入文字和NG單擊參數按鈕:

<label>List name</label> 
<input type="text" ng-model="listname" class="form-control" placeholder="Type list name" /> 
<button type="submit" ng-click="addList()" name="submit" class="btn btn-primary form-control">Add list</button> 

在與POST方法域3不能是不同的(至少在角度),所以我不使用本地主機:8888,但使用完整路徑本地主機/文件夾/ ..它爲我工作。現在我可以將數據從前端發佈到後端。

0

我從來沒有使用Laravel,但是您需要向您的rout.php添加OPTIONS請求,而不僅僅是GET和POST。

因爲您說GET有效,但不是POST,所以我認爲這是簡單的和預先請求的問題。 POST原來是飛行前請求,因爲Angular默認使用application/json作爲數據類型。關於飛行前請求的MDN

它使用GET,HEAD或POST以外的方法。另外,如果POST用於發送具有除application/x-www-form-urlencoded,multipart/form-data或text/plain之外的Content-Type的請求數據,如果POST請求使用application/xml或text/xml向服務器發送XML有效內容,則會請求該請求。

因此,要麼將您的POST數據轉換爲urlencoded,要麼讓服務器響應OPTIONS請求。哪種方法更好,因爲您可能需要以某種原因進行預先飛行。