从 Prestashop 模块发出 ajax 请求

     2023-02-16     273

关键词:

【中文标题】从 Prestashop 模块发出 ajax 请求【英文标题】:Make an ajax request from a Prestashop module 【发布时间】:2017-09-27 12:51:20 【问题描述】:

我正在制作一个模块,我需要发出一个 ajax 请求,如果可能的话,使用 JSON 响应,我该怎么做? 我不太了解 Prestashop 1.7 的结构。

谢谢!

【问题讨论】:

【参考方案1】:

这很简单,您只需按照 Prestashop 的标准制作控制器,然后将其链接到您的前端 Javascript。

像这样命名一个 php 文件:./modules/modulename/controllers/front/ajax.php

然后放进去:

<?php

// Edit name and class according to your files, keep camelcase for class name.
require_once _PS_MODULE_DIR_.'modulename/modulename.php';

class ModuleNameAjaxModuleFrontController extends ModuleFrontController

    public function initContent()
    

        $module = new ModuleName;

        // You may should do some security work here, like checking an hash from your module
        if (Tools::isSubmit('action')) 

            // Usefull vars derivated from getContext
            $context = Context::getContext();
            $cart = $context->cart;
            $cookie = $context->cookie;
            $customer = $context->customer;
            $id_lang = $cookie->id_lang;

            // Default response with translation from the module
            $response = array('status' => false, "message" => $module->l('Nothing here.'));

            switch (Tools::getValue('action')) 

                case 'action_name':

                    // Edit default response and do some work here
                    $response = array('status' => true, "message" => $module->l('It works !'));
                    
                    break;

                default:
                    break;

            
        

        // Classic json response
        $json = Tools::jsonEncode($response);
        echo $json;
        die;

        // For displaying like any other use this method to assign and display your template placed in modules/modulename/views/template/front/...
        // Just put some vars in your template
        // $this->context->smarty->assign(array('var1'=>'value1'));
        // $this->setTemplate('template.tpl');

        // For sending a template in ajax use this method
        // $this->context->smarty->fetch('template.tpl');

    


?>

在你的Module Hooks中,你需要在JS中引入对路由的访问,所以我们基本上做一个变量:

// In your module PHP
public function hookFooter($params)

    
    // Create a link with the good path
    $link = new Link;
    $parameters = array("action" => "action_name");
    $ajax_link = $link->getModuleLink('modulename','controller', $parameters);

    Media::addJsDef(array(
        "ajax_link" => $ajax_link
    ));


在前端,您只需在 JS 文件中这样调用它(这里使用 jQuery):

// ajax_link has been set in hookfooter, this is the best way to do it
$(document).ready(function()

    $.getJSON(ajax_link, parameter1 : "value", function(data) 

        if(typeof data.status !== "undefined") 

            // Use your new datas here
            console.log(data);

        

    );

);

瞧,你的 ajax 已经准备好使用控制器了

【讨论】:

死了吗?真的像吗?使用 Symfony\Component\HttpFoundation\JsonResponse; 这是前段时间,使用原生解决方案会更好,但这会拒绝相同的答案。使用基础 Symfony 不是强制性的,因此不向后兼容...... 是的,在那之后我在谷歌上搜索了一下,旧的 PS 真的没有任何“最佳实践”解决方案......死真的很乱......

从 CouchDB Show Function 发出 AJAX 请求

】从CouchDBShowFunction发出AJAX请求【英文标题】:MakeAJAXrequestfromCouchDBShowFunction【发布时间】:2014-10-1316:47:43【问题描述】:我正在尝试创建一个类似于couchperuser的CouchApp,它将为每个用户创建一个沙发数据库。我的目标不是设置单... 查看详情

发出一个简单的 Ajax 请求

】发出一个简单的Ajax请求【英文标题】:MakingasimpleAjaxrequest【发布时间】:2020-01-2811:38:01【问题描述】:我正在尝试使用Lampp服务器从我的本地计算机进行Ajax调用,但它一直出现此错误。CORS策略已阻止从源“null”访问“file:///o... 查看详情

net::ERR_INSECURE_RESPONSE 从 node-webkit 发出 ajax 请求

】net::ERR_INSECURE_RESPONSE从node-webkit发出ajax请求【英文标题】:net::ERR_INSECURE_RESPONSEwhilemakingajaxrequestfromnode-webkit【发布时间】:2015-01-1204:53:26【问题描述】:当我尝试使用jquery发出ajax请求时:https://localhost:8443/uri我收到此错误:net:... 查看详情

如何向视图发出ajax请求

】如何向视图发出ajax请求【英文标题】:Howtomakeanajaxrequesttoaview【发布时间】:2016-09-2914:01:08【问题描述】:我试图弄清楚如何从我的模板发出ajax请求(使用jquery),以便在单击按钮时执行视图。我不想重定向到另一个页面。... 查看详情

django通过ajax获取请求发出两个请求(代码片段)

...努力将数据从ajax传递到Django视图。但是,ajax以某种方式发出了2个GET请求:一个带有查询字符串,另一个带有查询字符串。在视图中,当我尝试将查询字符串变为空时。Ajax代码:<script>$(document).ready(function()varquery="item.ipv4_add... 查看详情

如何使用 Ajax 发出跨域请求?

】如何使用Ajax发出跨域请求?【英文标题】:HowdoImakeanCrossDomainRequestwithAjax?【发布时间】:2012-12-2220:43:11【问题描述】:我被要求从xml提要中获取一些“数据”并将其添加到我在服务器上托管的页面。我想我会使用jQueryAjaxapi—... 查看详情

在 Electron 中,发出 ajax 请求的最佳方式是啥?

】在Electron中,发出ajax请求的最佳方式是啥?【英文标题】:InElectron,whatisthebestwaytomakeajaxrequests?在Electron中,发出ajax请求的最佳方式是什么?【发布时间】:2017-04-1210:08:32【问题描述】:我正在使用电子创建桌面应用程序,现... 查看详情

在 iframe 内容中发出跨域 ajax 请求是不是可行?

】在iframe内容中发出跨域ajax请求是不是可行?【英文标题】:Isitviabletomakecross-domainajaxrequestswithiniframedcontent?在iframe内容中发出跨域ajax请求是否可行?【发布时间】:2011-11-2014:59:43【问题描述】:我有一个域上的应用程序需要从... 查看详情

Django - 发出 Ajax 请求

】Django-发出Ajax请求【英文标题】:Django-MakinganAjaxrequest【发布时间】:2019-02-2501:46:28【问题描述】:我很难弄清楚如何将此ajax请求集成到我的视图中。我仍在学习如何将django与ajax请求集成。我的第一个问题是:ajax请求是否需... 查看详情

发出 Ajax POST 请求时出现“parseerror”

】发出AjaxPOST请求时出现“parseerror”【英文标题】:"parseerror"whileMakinganAjaxPOSTrequest【发布时间】:2021-07-3018:31:54【问题描述】:我正在尝试在nodeJs中使用Ajax发出POST请求。当我运行函数alert(status)时会弹出说parseerror。这个... 查看详情

为啥我的 JQuery .ajax 请求不是并行发出的?

】为啥我的JQuery.ajax请求不是并行发出的?【英文标题】:Whyaren\'tmyJQuery.ajaxrequestsbeingmadeinparallel?为什么我的JQuery.ajax请求不是并行发出的?【发布时间】:2011-02-0204:18:25【问题描述】:我正在尝试使用jQuery并行发出两个ajax请求... 查看详情

计算机组成原理

...钟总线,为实现数据同步,采用“应答”机制。主模块发出数据后,等待从模块的应答信息,从模块收到数据后,立即向主模块发出应答信息。实现数据同步。不互锁,主模块发出信号后,不必等待从模块的应答信号,等... 查看详情

如何使用 Express 框架发出 AJAX 请求?

】如何使用Express框架发出AJAX请求?【英文标题】:HowcanImakeAJAXrequestsusingtheExpressframework?【发布时间】:2013-10-0503:58:36【问题描述】:我想使用Express发送AJAX请求。我正在运行如下代码:varexpress=require(\'express\');varapp=express();app.get... 查看详情

如何检查请求是不是通过 CodeIgniter 中的 AJAX 发出?

】如何检查请求是不是通过CodeIgniter中的AJAX发出?【英文标题】:HowdoIcheckiftherequestismadeviaAJAXinCodeIgniter?如何检查请求是否通过CodeIgniter中的AJAX发出?【发布时间】:2011-05-1702:44:33【问题描述】:如何检查请求是否为AJAX?我正在... 查看详情

Ajax 调用失败。使用 Jquery .ajax 函数发出简单的请求

】Ajax调用失败。使用Jquery.ajax函数发出简单的请求【英文标题】:Ajaxcallfailing.UsingJquery.ajaxfunctiontomakesimplerequest【发布时间】:2011-08-2414:06:28【问题描述】:这里是调用ajax函数的jquery:functionsendAjax(type,succ)//wheresuccisthesuccesscallbac... 查看详情

当表单中存在文件字段时,Rails 不发出 Ajax 请求

】当表单中存在文件字段时,Rails不发出Ajax请求【英文标题】:RailsnotmakingAjaxrequestwhenfilefieldispresentinform【发布时间】:2021-03-1502:05:24【问题描述】:问题总结根据thedocs,在使用form_with时,Rails默认发出Ajax请求。我需要一个Ajax... 查看详情

Prestashop - 现有 prestashop 模块中的覆盖功能

】Prestashop-现有prestashop模块中的覆盖功能【英文标题】:Prestashop-overridefunctioninexistingprestashopmodule【发布时间】:2011-09-0217:45:22【问题描述】:我想更改现有的prestashop模块而不复制它并创建新模块。我知道可以覆盖prestashop中的.t... 查看详情

为啥PHP收不到AJAX发出的post请求

】为啥PHP收不到AJAX发出的post请求【英文标题】:WhydoesPHPdoesnotreceivethepostrequestthatmadebyAJAX为什么PHP收不到AJAX发出的post请求【发布时间】:2020-10-1909:54:41【问题描述】:这是我的javascript代码,成功事件被执行。但是php文件中的pos... 查看详情