2016-07-17 13 views
0

私はここ数日からこの問題に苦労しています。

私はPHPでslim framework v3を使用してapiを作成しました。

のXMLHttpRequest http://192.168.0.5/project/api/testingをロードすることはできません - :私はangularjs $ HTTPから任意の経路を呼び出すときのよう

iは、コンソールのエラーを取得します。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。 Origin 'http://localhost'はアクセスできません。

<?php 
use Psr\Http\Message\ServerRequestInterface as Request; 
use Psr\Http\Message\ResponseInterface as Response; 

require 'vendor/autoload.php'; 
require 'app/config/configuration.php'; 

$app = new Slim\App(["settings" => $config]); 
spl_autoload_register(function ($class_name) { 
require("app/" . $class_name . ".php"); 
}); 

$app->get("/testing",function(Request $request,Response $response){ 
    generateResponse($response,array("message"=>"success")); 
}); 
function generateResponse($response, $data) 
{ 
return $response->withStatus(200) 
    ->withHeader("Content-Type", "application/json") 
    ->withHeader("Access-Control-Allow-Origin", "*") 
    ->withHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") 
    ->withHeader("Access-Control-Allow-Headers", "Content-Type, Depth, User-Agent, X-File-Size,X-Requested-With, If-Modified-Since,X-File-Name, Cache-Control, x-hash-key, x-req-timestamp, user-language-pref, Content_Language") 
    ->write(json_encode($data)); 
} 

$app->run(); 

私は応答としてヘッダーを追加しました。しかし、私は$ HTTPからそれはエラーをスローするルートapiを呼び出すときはまだ。

私はまったく空白ですが、何か愚かなことが分かりません。このことを解決するために私を助けてください。

おかげ

UPDATE:それは今働いているPHPファイルのヘッダを付加することにより、溶液

。 ヘッダー( 'Access-Control-Allow-Origin:*');
ヘッダー( 'アクセス制御許可メソッド:GET、PUT、POST、DELETE、OPTIONS'); ヘッダー( 'アクセス制御許可ヘッダー:Content-Type、Content-Range、Content-Disposition、Content-Description');

それはいくつかの日に便利かもしれません。このリンクに注意してください: - Click to go->

+0

問題は、CORSを実装していないということです... http://stackoverflow.com/questions/38005829/cors-post-request-fails/38035128#38035128 – geggleto

答えて

1

ことの一つは、ライン14上のreturnが欠けているということです。

return generateResponse($response,array("message"=>"success")); 

あなたはヘッダが中に存在しているかどうかを確認することができますブラウザのデベロッパーコンソールで

これは唯一の問題として考えられます。

+0

返答はgenerateResponse内にありますので、それを再び返す必要があります。 そして私はヘッダーのためのブラウザをチェックインしました。 ブラウザからapiを呼び出すと動作していますが、angularjsでajax経由で呼び出すと動作しません。 – RKD

+0

いいえ、そうではありません。 generateResponse()は$ responseの新しいコピーを返しますが、この値はどこにも格納されていないので、$ app-> get()メソッドのスコープで破棄されます。ブラウザで動作するのは、CORSが直接呼び出された場合には適用されないためです。私が答えて書いたように、ブラウザの開発者コンソールでレスポンスヘッダーをチェックして、Access-Control-Allow- *とContent-typeヘッダーのどちらも表示されないようにします。他のドメインからAngular(一般にAJAXが来たとき)から呼び出されたときは、CORSを許可する必要があります。私の答えのコードがなければ、それは起こりません。 – jirka

+0

はい、どうすればanglejsでcorsを有効にすることができますか?現時点では、私は私のコードで私は応答でヘッダーを追加しているので、私はPHPコードで何か余分なことをする必要があると思うように見えることができます。 – RKD

関連する問題