在 Magento 中使用基本 AJAX 调用

Posted

技术标签:

【中文标题】在 Magento 中使用基本 AJAX 调用【英文标题】:Using Basic AJAX calls within Magento 【发布时间】:2012-02-08 17:54:12 【问题描述】:

我正在编写一个模块来在 Magento 中执行一个简单的 Ajax 调用,但到目前为止我无法让它工作 - 我觉得我在某个地方缺少了一个重要的组件。这些是我目前拥有的文件:

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>

我的 Ajax 调用:

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

布局/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>

目前我的 .phtml 文件中只有“测试”。我只需要我的结果 div 来返回“测试”值。我只是想知道是否所有的位都准备好了?

这是我遵循的教程:http://www.atwix.com/magento/ajax-requests-in-magento/

========================= 已解决=================== =====

我只需要在我的网址开头添加一个正斜杠:

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

【问题讨论】:

将问题分解为更小的任务。如果您直接访问 URL“example.com/groupedajax/ajax/index”会发生什么?由于 jQuery 被赋予了相对路径,它是否访问了正确的 URL?使用 Firebug 进行检查。您是否有与 groupedajax/groupedajax 类型匹配的块类,或者可以使用更简单的 core/template 来代替? 当我到达 /groupedajax/ajax/index 时,我看到了“测试”,所以它工作正常。我已将类型更改为“核心/模板”,因为我没有匹配的 Block 类,这是我的疏忽。我会继续检查...也许 Jquery ajax 调用停止工作... 我已经弄明白了——我的 Jquery URL 脚本在开头需要一个正斜杠: $j.post("/groupedajax/ajax/index", size: $j(this).val (), function(data) $j('#results').html(data); ); @AdamMoss 我正在尝试做类似的事情。一个问题,javascript 代码应该放在哪里?我是否应该简单地使用我的 ajax 函数创建一个 .js 文件,将其放在 js 文件夹中并在 xml 中创建对它的引用?谢谢 【参考方案1】:

如果您的 javascript 是从 .phtml 模板文件输出的,那么您可以使用 a convenience function 使 URL 完全合格,这将是最安全的继续操作方式。

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

【讨论】:

太好了,这就是解决方案!谢谢!

以上是关于在 Magento 中使用基本 AJAX 调用的主要内容,如果未能解决你的问题,请参考以下文章

Magento 中的 Ajax(加载产品视图块)

使用AJAX的Magento 1.9产品列表

magento2:使用 Ajax 加载 uicomponent

Magento 1.9 (PayPal) 代理认证

在 magento 中调用块时未显示类别

Magento Ajax滚动扩展