2011-09-26 31 views
6

Tôi là người mới bắt đầu trong Symfony (phiên bản 2), tôi có một dự án đã đạt được với PHP cơ bản đơn giản, và bây giờ tôi đang làm lại các trang của mình trong việc xử lý khung công tác Symfony và đến jquery ajax của tôi chức năng, chắc chắn, mọi thứ sẽ khác nhau, tôi từng làm như thế này:Ajax và Jquery trong Symfony

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

Q: làm thế nào để thực hiện hoạt động trên Symfony? Điều gì cần đặt thay vì targetFile.php? một tuyến đường có lẽ nhất. và phải làm gì ở phía bộ điều khiển và bộ định tuyến? Tôi đã xem trên Google và ở đây, nhưng không nhận được bất kỳ câu trả lời rõ ràng nào. Trân trọng.

+0

bạn đang gặp sự cố gì? – JamesHalsall

+0

Làm thế nào để tạo một hàm Jquery Ajax hoạt động trên Symfony? –

Trả lời

4

Nếu bạn đặt bên trong routing.yml này:

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

... và bên trong bộ điều khiển tha sẽ xử lý cuộc gọi ajax này:

/** 
* @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); 
} 

... sau đó bên trong ví dụ TWIG mẫu bạn nên gọi nó như thế này:

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

... và tuyến đường thực sự cho hành động của bạn sẽ được tạo ra với khuôn mẫu động cơ.

+0

Vâng, tôi sẽ thử, nhưng nếu mẫu là một tập tin php thì sao? những gì để đặt làm url. –

+0

Thêm rằng giải quyết vấn đề: '$ isAjax = $ this-> get ('Request') -> isXMLHttpRequest();' thực sự tôi không hiểu logic của Symfony :), bất kỳ cách nào, cảm ơn bạn, tôi đánh giá cao sự hỗ trợ của bạn bro . –

+0

Và cũng xóa bộ nhớ cache có thể ảnh hưởng đến, tôi không thể nói rằng đó là giải pháp coz tôi đã luôn luôn xóa bộ nhớ cache mỗi khi tôi thay đổi một cái gì đó. –

5

Bạn thực sự chỉ phải thay thế targetFile.php bằng một tuyến đường tùy chỉnh của bạn.

Vì vậy, nếu bạn có điều này trong routing.yml của bạn:

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

Bạn có thể sử dụng javascript này:

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

Về phía Symfony2, các indexAction phương pháp của SiteController của AcmeHelloBundle sẽ được gọi là.

+0

xem Firebug nói gì với tôi: Không tìm thấy URL/mục tiêu được yêu cầu không được tìm thấy trên máy chủ này. trong khi router của tôi là: 'target: pattern:/target defaults: {_controller: WWBundle: Default: target}' và Javascript của tôi là '$ (" # div "). click (function() {$ .post ("/target ", {/ * parameters * /, function (data) {});});' và controller là 'public function targetAction() {return $ this-> render ('WWBundle: Mặc định: target.html.php'); } 'Ông Damien có vấn đề gì? –

+0

đã thử xóa bộ nhớ cache của bạn? – JamesHalsall

+0

Có, nhưng tôi vẫn nhận được thông báo này: "NetworkError: 404 Not Found - http: // localhost/target". –