2016-07-17 2 views
0

지난 며칠 동안이 문제로 고심하고 있습니다.

저는 PHP에서 슬림 프레임 워크 v3을 사용하여 API를 만들었습니다.

XMLHttpRequest의 http://192.168.0.5/project/api/testing를로드 할 수 없습니다 -이 : 내가 AngularJS와 $ HTTP에서 어떤 경로를 호출 할 때 같은

내가 콘솔 오류가 발생합니다. 'Access-Control-Allow-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 파일에서 헤더를 추가함으로써 해결

. 헤더 ('액세스 제어 허용 - 원본 : *');
헤더 ('액세스 제어 허용 방법 : 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")); 

당신은 헤더가 존재 여부를 확인할 수 있습니다 브라우저의 dev 콘솔에서 응답.

빠른 검토에서 이것은 유일한 문제로 보입니다.

+0

응답을 generateResponse 내부로 반환하고 있습니다. 그것을 다시 돌려 줄 필요가있다. 그리고 브라우저에서 헤더를 확인했습니다. 브라우저에서 API를 호출하면 작동하지만 angularjs에서 ajax를 통해 호출하면 작동하지 않습니다. – RKD

+0

아니요, 그렇지 않습니다. generateResponse()는 $ response의 새로운 사본을 반환하지만,이 값은 아무 곳에 나 저장되지 않기 때문에 $ app-> get() 메소드의 범위 내에서 버려집니다. 브라우저에서 작동하는 이유는 직접 호출 할 때 CORS가 적용되지 않기 때문입니다. 내 답변에 쓴 것처럼 브라우저의 개발자 콘솔에서 Access-Control-Allow- * 및 Content-Type 헤더가 표시되지 않는 응답 헤더를 확인하십시오. 다른 도메인에서 각도 (일반적으로 AJAX가 올 때)에서 호출되면 CORS를 허용해야합니다. 내 대답의 코드 조각이 없으면 그런 일은 일어나지 않습니다. – jirka

+0

그래, 어떻게 각도 j에서 코를 사용할 수 있을지 조금 도와 줄 수있다. 현재로서는 내가 PHP 코드로 추가 작업을 할 필요가 없다고 생각하므로 응답에 헤더를 추가했습니다. – RKD

관련 문제