2013-12-09 8 views
26

私はangularjsとlaravel 4でアプリケーションを構築しています。 すべては問題ありませんが、今はXHR要求のみを許可する必要があります。Laravel angularjs Request :: ajax()always false

これは私がコントローラの初めに持っていたものです。 しかし、このステートメントは常にfalseです。

if (!\Request::ajax()) 
    { 
     return Response::json(array('halt'=>Request::ajax())); 
    }; 

私は標準的な$ httpサービスを使用しています。

angular.module('APP') 
.factory("API", ($http,$q,appClient,apiURL) -> 
class FB 
    constructor:-> 
    this.deferredData = $q.defer(); 
    info: (reload)-> 
    $http(
     method: "get" 
     url: apiURL+'game/'+appClient+"/info" 
    ).success((res)-> 
     dostuff() 
    ) 
+1

[この答えをチェックしてください](http://stackoverflow.com/questions/20166320/laravel-4- ajax-check-to-include-xmlhttprequest-magnific-popup/20167599#20167599)。 –

+1

通常、AJAX呼び出しを行うとき、ほとんどのブラウザでヘッダが設定されます: 'X-Requested-With:XMLHTTPRequest'。ブラウザのインス​​ペクタのヘッダが見えますか? – SuperSaiyan

+5

ありがとうございます: '$ httpProvider.defaults.headers.common [" X-Requested-With "] =" XMLHttpRequest "' – zajca

答えて

33

AJAX呼び出しを行う場合、X-Requested-Withヘッダは、多くの場合、XMLHttpRequestに設定されています。 LaravelのRequest::ajax()メソッドは、単にこのヘッダーの存在をチェックするSymfony2メソッドの上に構築されています。

2012年10月にAngular.js removedがほとんど使用されていないと感じたため、このヘッダー。

@Thrustmasterとコメントで述べた自分が、あなたが設定する必要があるとして:

$httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest" 
+0

はい、私はこの質問は非常に古いことを知っています。この答えは、「未回答の質問」リストからそれを取り除くことです。それがコミュニティのwikiなのです。 –

20

をあなたではなく、フロントエンドの角度アプリケーション(またはできない)を変更しないだろう、とかなり変更したい場合角度JS AJAX要求対他の要求を区別するためにあなたのLaravelコード、あなたもRequest::wantsJson()を使用することができます。

if(Request::wantsJson()) { 
    // Client wants JSON returned 
} else { 
    // Client does not want JSON returned 
} 

wantsJson方法は、標準的なAccepts HTTPヘッダー(というよりも、非標準に依存していますヘッダー)には、application/jsonが存在します。 Angular JSがデフォルトでそれを残し、意図的に削除しない限り、このメソッドは信頼できるものでなければなりません。ここで$httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"

を追加する場所を探してAngularJs初心者のために

+0

ありがとう、私はこの解決策が好きです:) –

+0

パーフェクト。ちょうど私が探していたもの。 – skovmand

+0

二重投票が必要です:+1 – Murwa

13

は一例です:

var angularApp = angular 
    .module('angularApp', [ 
    'ngResource', 
    ]) 
    .config(['$httpProvider', function($httpProvider) { 
     $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest'; 
    }]);