2012-01-12 50 views
21

Tôi đang viết một mô-đun để thực hiện một cuộc gọi Ajax đơn giản trong Magento, nhưng tôi không thể làm việc đó cho đến nay - tôi cảm thấy mình thiếu một thành phần quan trọng ở đâu đó. Đây là những tập tin tôi hiện có:Sử dụng các cuộc gọi AJAX cơ bản trong Magento

Creare/Groupedajax/controllers/AjaxController.php:

class Creare_Groupedajax_AjaxController extends Mage_Core_Controller_Front_Action { 

    public function indexAction() { 
     $this->loadLayout(); 
     $this->renderLayout(); 
    } 
} 

Creare/Groupedajax/etc/config.xml:

<?xml version="1.0"?> 
<config> 
    <modules> 
    <Creare_Groupedajax> 
     <version>0.1.0</version> 
    </Creare_Groupedajax> 
    </modules> 
    <frontend> 
    <routers> 
     <groupedajax> 
     <use>standard</use> 
     <args> 
      <module>Creare_Groupedajax</module> 
      <frontName>groupedajax</frontName> 
     </args> 
     </groupedajax> 
    </routers> 
    <layout> 
     <updates> 
     <groupedajax> 
      <file>groupedajax.xml</file> 
     </groupedajax> 
     </updates> 
    </layout> 
    </frontend> 
</config> 

Cuộc gọi Ajax của tôi:

$j.post("groupedajax/ajax/index", { size: $j(this).val()}, function(data) { 
     $j('#results').html(data); 
    }); 

bố trí/groupedajax.xml:

<?xml version="1.0"?> 
<layout version="1.0"> 
    <groupedajax_ajax_index> 
    <block type="groupedajax/groupedajax" name="root" output="toHtml" template="groupedajax/groupedajax.phtml" /> 
    </groupedajax_ajax_index> 
</layout> 

tập tin .phtml tôi chỉ đơn giản là có 'test' trong nó vào lúc này. Tôi chỉ cần div kết quả của mình để trả về giá trị 'test'. Tôi chỉ muốn biết nếu tất cả các bit được đặt ra cho điều này để làm việc?

Đây là hướng dẫn, tôi đã theo: http://www.atwix.com/magento/ajax-requests-in-magento/

======================== SOLVED ======= =================

tôi chỉ cần một người dấu gạch chéo ở phần đầu của url của tôi:

$j.ajax({ 
     url: "/groupedajax/ajax/index", 
     type: "POST", 
     data: "size="+$j(this).val(), 
     success: function(data) { 
     $j('#results').html(data); 
     } 
    }); 
+0

Giải quyết sự cố thành các tác vụ nhỏ hơn. Điều gì sẽ xảy ra nếu bạn truy cập trực tiếp vào URL "example.com/groupedajax/ajax/index"? Kể từ khi jQuery được đưa ra một đường dẫn tương đối là nó truy cập vào URL chính xác? Sử dụng Firebug để kiểm tra. Bạn có một lớp khối khớp với kiểu 'groupedajax/groupedajax' hoặc có thể sử dụng' lõi/mẫu' đơn giản hơn không? – clockworkgeek

+0

Khi tôi đến/groupedajax/ajax/index tôi thấy 'test' để nó hoạt động. Tôi đã thay đổi loại thành 'core/template' bởi vì tôi không có một lớp Block phù hợp mà là một sự giám sát về phía tôi. Tôi sẽ tiếp tục kiểm tra ... có lẽ cuộc gọi Jquery ajax ngừng hoạt động ... –

+0

Tôi đã tìm ra - tập lệnh Jquery URL của tôi cần một dấu gạch chéo ở đầu: $ j.post ("/ groupedajax/ajax/chỉ mục ", {size: $ j (this) .val()}, hàm (dữ liệu) { $ j ('# results'). html (dữ liệu); }); –

Trả lời

22

Nếu javascript của bạn đang được đầu ra từ một Tệp mẫu .phtml sau đó bạn có thể sử dụng a convenience function để làm cho URL đủ điều kiện mà sau đó sẽ là an toàn nhất wa y để tiếp tục.

$j.ajax({ 
    url: "<?php echo $this->getUrl('groupedajax/ajax/index') ?>", 
    type: "POST", 
    data: "size="+$j(this).val(), 
    success: function(data) { 
    $j('#results').html(data); 
    } 
}); 
+1

Tuyệt vời, đó là giải pháp! Cảm ơn bạn! –

+0

câu trả lời hoàn hảo với lời giải thích !!! +1 :) – SagarPPanchal

Các vấn đề liên quan