2011-09-26 4 views
6

저는 Symfony (버전 2)의 초보자입니다. 기본 PHP로 기본 프로젝트를 완성했습니다. 이제 symfony 프레임 워크를 다루는 데 내 페이지를 다시 작성하고 jquery ajax에 도착했습니다. 기능은 확실히 상황이 거 다를 수, I는 다음과 같이 수행하는 데 사용 :Symfony의 Ajax 및 Jquery

$("#div").click(function(){ 
    $.post("targetFile.php",{/*parameters*/,function(data){ }); 
}); 

Q : 어떻게 심포니에 작품을 만들기 위해? targetFile.php 대신 무엇을 넣어야합니까? 가장 가능성이있는 길. 컨트롤러 및 라우터 쪽에서해야 할 일은 무엇입니까? Google에서 여기를 보았지만 명확한 답변을 얻지 못했습니다. 감사합니다.

+0

무엇이 문제입니까? – JamesHalsall

+0

Jquery Ajax 함수를 만드는 방법은 Symfony에서 작동합니까? –

답변

4

/** 
* @Route("/ajaxhandler", name="_admin_ajax_handler") 
*/ 
public function handlerAction() { 

    $isAjax = $this->get('Request')->isXMLHttpRequest(); 
    if ($isAjax) { 
     //... 
     return new Response('This is ajax response'); 
    } 
    return new Response('This is not ajax!', 400); 
} 

... 다음 내부 예를 들어 나뭇 가지 템플릿을 사용하면 다음과 같이 호출해야합니다.

$("#div").click(function(){ 
    $.post("{{ url('_admin_items_add') }}",{/*parameters*/,function(data){ }); 
}); 

... 실제 동작 경로는 템플릿으로 생성됩니다. 엔진.

+0

글쎄, 내가 시도해 보겠다.하지만 템플릿이 PHP 파일이라면? 무엇을 URL로 넣을 것인가. –

+0

그 문제를 추가하면 :'$ isAjax = $ this-> get ('Request') -> isXMLHttpRequest();'정말로 Symfony 논리를 이해하지 못한다. :) 어떤 식 으로든, 고맙다. . –

+0

또한 캐시 지우기에 영향을 미칠 수 있습니다. 솔루션을 변경할 수 없을 때마다 캐시를 ​​항상 지우고 있다고 말할 수는 없습니다. –

5

사실 귀하의 맞춤 경로로 targetFile.php를 바꾸기 만하면됩니다. 당신이 당신의 routing.yml이있는 경우

그래서 :

# app/config/routing.yml 
hello: 
    pattern:  /ajax/target 
    defaults:  { _controller: AcmeHelloBundle:Site:index } 

당신이 자바 스크립트를 사용할 수는 Symfony2 측의 AcmeHelloBundle의 SiteController의 방법 indexAction을

$("#div").click(function(){ 
    $.post("/ajax/target",{/*parameters*/,function(data){ }); 
}); 

을 것이다 불리다.

_admin_ajax: 
    resource: "@SomethingAdminBundle/Controller/AjaxController.php" 
    type:  annotation 
    prefix: /admin/ajax 

... 그리고 컨트롤러 그쪽 내부에이 아약스 호출을 처리합니다 :이 routing.yml 내부 설정하면

+0

파이어 버그가 나에게 말하는 것을보세요 : 발견되지 않음 요청한 URL/대상을이 서버에서 찾을 수 없습니다. 반면에 내 라우터는 : target : pattern :/target defaults : {_controller : WWBundle : Default : target}'이고 자바 스크립트는'$ ("# div")입니다. 컨트롤러는'public function targetAction() {return $ this-> render ('WWBundle : Default : target.html.php'), {/ * 매개 변수 * /, 함수 (데이터) {}); } '데이미언 씨의 잘못은 무엇입니까? –

+0

캐시를 삭제하려고 했습니까? – JamesHalsall

+0

예 : "NetworkError : 404 Not Found - http : // localhost/target"메시지를 받았습니다. –