2012-08-03 2 views
2

내 다른 질문에 대한 참조 : Context-aware AJAX call in a modular site, 편리한 방법으로 AJAX 프록시를 설정할 수 있습니까?PHP로 AJAX 프록시가 가능합니까?

모듈 형 Apache/PHP/MySQL 사이트에서 ajax php 파일의 올바른 경로를 계산하고, 서버 측 PHP 지침으로 JavaScript 코드를 오염시키지 않고 동적 URL을 사용하여 AJAX 요청을 작성하고 싶습니다. 나에게서부터로. 즉, 사이트에는 CSS, JS 및 PHP가 포함 된 자체 폴더 구조가 포함 된 플러그인 및 구성 요소가 있으며 폴더를 동적으로 검색 할 수있는 기능이 있습니다. 내가 원하는 것 그 :

$("#mydiv").load(siteRoot + "/ajax.php?plugin=datagrid& 
action=myaction&... other params..."); 

대신 (PHP로 URL 계산 서버 측)를 호출합니다 : (주사, CSRF 및 기타 해킹에 대한 가능한 모든 검사와 명백하게)

{siteRoot}/components/datagrid/ajax/myaction.php?... other params ... 

.

답변

1

/ajax/get.php 파일은 다음과 비슷한 모습이 될 것

물론
$plugin = $_GET['plugin']; 
$action = $_GET['action']; 
$get = array(); 
foreach ($_GET as $k=>$v) { 
    if($k!='plugin' && $k!='action') { 
     $get[] = "{$k}={$v}"; 
    } 
} 
$url = 'siteRoot/components/'.$plugin.'/ajax/'.$action.'.php?'.implode('&', $get); 

header("Location: {$url}"); 

, 당신은 위의 코드에 몇 가지 보안 검사를 추가 할 필요가

편집 : 단점은 '원이다 POST를 보내는 t 작업이

+0

그래서 AJAX 호출의 경우 헤더 리디렉션이 작동합니다. 그것은 흥미 롭다. POST 헤더를 포함시키기 위해 적응하는 것은 어렵지 않아야한다. – Cranio

+0

나는 그것이 어렵다고 두려워한다. AJAX 요청은 본질적으로 표준 HTTP 요청이므로 여기서는 어떤 마법도 필요하지 않습니다. 이 PHP 코드에서 우리가하는 일은 리다이렉트 헤더를 보내는 것인데, 다시 브라우저로 돌아가서 주어진 URL에 내용을 요청합니다. 하지만 POST 데이터를 두 번째로 보내지는 않습니다 (정상적인 POST-REDIRECT-GET 패턴입니다). POST 데이터를 보내려면 POST 데이터를 보내고 PHP 스크립트 (아마도 cURL 사용)에서 응답을 읽고 응답을 출력해야합니다. 코드 샘플을위한 Google 'php curl post' – jderda

+0

네 답을 기반으로 이미 약간의 연구를 완료했으며 cURL이가는 길로 보인다. 또는 POST 변수가 특별히 표시되고 GET 변수로 변환되는 GET 요청을 작성합니다 (그러나 GET에 길이 제한이 있기 때문에 완전한 호환성이 없음). 귀하의 설명 주셔서 감사합니다 :) – Cranio

0

는 대신 당신은 또한 귀하의 첫 번째 페이지 요청에 자바 스크립트 변수를 선언 한 후 하자 사용할 수 있습니다 요청 말할 SITE_URL은 PHP 계산 URL을 포함

var siteRoot = '<?php echo SITE_ROOT?>' // or some thing else 

그래서이 줄 뒤에 포함 된 모든 .js 스크립트에 대해 siteRoot var가 정의됩니다.

+0

내 다른 질문 (내가 연결 한 하나)에 명시된 바와 같이, 나는 이미 그 접근법을 사용하고 있지만 URL에 좀 더 유연성을 원합니다. 어쨌든 진짜 AJAX 프록시 스크립트에 대해 묻고 있습니다. – Cranio

관련 문제