Php 在backoffice PrestaShop模块中使用AJAX
我正在为购物车PrestaShop创建一个模块,因此在创建一个在他们的系统中工作的模块时,我必须遵循一套规则框架,并且我希望在不重新加载页面的情况下通过AJAX提交表单 以下是模块页面的修剪版本,用于构建和确定显示的内容:Php 在backoffice PrestaShop模块中使用AJAX,php,ajax,json,class,prestashop,Php,Ajax,Json,Class,Prestashop,我正在为购物车PrestaShop创建一个模块,因此在创建一个在他们的系统中工作的模块时,我必须遵循一套规则框架,并且我希望在不重新加载页面的情况下通过AJAX提交表单 以下是模块页面的修剪版本,用于构建和确定显示的内容: <?php class mymodule extends Module { private $_html = ''; // Module information function __constr
<?php
class mymodule extends Module
{
private $_html = '';
// Module information
function __construct()
{
// Get shop version
$versionMask = explode('.', _PS_VERSION_, 3);
$versionTest = $versionMask[0] > 0 && $versionMask[1] > 3;
// Module info
$this->name = 'MyModule';
$this->tab = $versionTest ? 'administration' : 'Administration';
if ($versionTest) { $this->author = 'JD'; }
$this->version = '0';
parent::__construct();
$this->displayName = $this->l('MyModule');
$this->description = $this->l('Description...');
}
// Display content
public function getContent()
{
$this->_displayForm();
return $this->_html;
}
// Build the display
private function _displayForm()
{
$this->_html .= '<script src="../modules/mymodule/scripts.js" type="text/javascript"></script>
<form name="formName" id="formName" method="get">
<input type="submit" name="submitModule" value="Continue" />
</form>';
}
}
?>
还有ajax.php文件本身,我已经对其进行了精简,因此它必须显示一个结果:
<?php
$json['response'] = 1;
echo json_encode($json);
exit();
?>
scripts.js:132
引用行:if(data.response==1)
我还将它从类中取出,放在一个普通的页面/单独的目录中,并具有相同的代码,只是不在类/函数中:
index.php
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="scripts.js" type="text/javascript"></script>
<form name="formName" id="formName" method="get">
<input type="submit" name="submitModule" value="Continue" />
</form>
ajax.php
<?php
$json['response'] = 1;
echo json_encode($json);
exit();
?>
当我提交页面时,我得到的警报为true,如果我查看ajax.php,我会得到
{“response”:1}
。因此,代码本身是可以的,它只是将它与它们的类/函数集成在一起。我认为您的结果发送正常,但没有被解释为JSON,我敢说这有点jquerys的错误
header('Content-Type: text/javascript; charset=utf8');
将其放入PHP脚本中应该可以做到这一点,并强制正确解释数据中的json格式。
如果前面的建议没有实现,请尝试使用$.parseJson();与jQuery文档一样:
var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );
我认为您的结果发送正常,但并没有被解释为JSON,这有点jquerys的错误——我敢说
header('Content-Type: text/javascript; charset=utf8');
将其放入PHP脚本中应该可以做到这一点,并强制正确解释数据中的json格式。
如果前面的建议没有实现,请尝试使用$.parseJson();与jQuery文档一样:
var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );
似乎是scripts.js文件中ajax.php文件的路径导致了问题 这与prestashop中文件夹的结构有关,所有模块都放在/prestashop/modules/目录中,但模块是从/prestashop/admin/查看的。因此,将它们更改为完整路径解决了问题
感谢那些在这里帮助过我们的人,我们仍然很感激 似乎是scripts.js文件中ajax.php文件的路径导致了问题 这与prestashop中文件夹的结构有关,所有模块都放在/prestashop/modules/目录中,但模块是从/prestashop/admin/查看的。因此,将它们更改为完整路径解决了问题
感谢那些在这里帮助过我们的人,我们仍然很感激 您使用的是哪个prestashop版本?prestashop v1.5.2.0-目前也在Chrome v23.0.1271.95mif的Windows 7(64位)上的XAMPP v3.1.0.3.1.0上运行它。如果您检查homeslider模块的代码,您可能会在模块中了解ajax,此模块使用ajax更改幻灯片顺序。啊,谢谢,我现在就去看看这个,看看它是怎么回事!为什么不把console.log(response)发给我们,让我们知道到底发生了什么,我认为这与prestashop无关:)您使用的是哪个prestashop版本?prestashop v1.5.2.0-目前也在Windows7(64位)上的XAMPP v3.1.0.3.1.0上运行它在Chrome v23.0.1271.95mif中,如果您检查homeslider模块的代码,您可能会对模块中的ajax有所了解,该模块使用ajax来更改幻灯片的顺序。啊,谢谢,我现在就去看看,看看它是如何运行的!为什么不把console.log(response)发布给我们,让我们知道到底发生了什么,我认为这与prestashop无关:)我试着设置标题,它显示了prestashop AJAX加载程序,但它只是停留在那里,我没有任何结果,控制台日志中也没有任何内容。我还尝试了parseJSON,如下所示:
success:function(data){var obj=jQuery.parseJSON(data.response);alert(obj);}
我收到了“null”警报,因此我不确定我是否正确实现了它?我尝试设置标题,它显示了PrestaShop AJAX加载程序,但它只是停留在那里,我没有任何结果,控制台日志中也没有任何内容。我还尝试了parseJSON,比如:success:function(data){var obj=jQuery.parseJSON(data.response);alert(obj);}
我得到了警报“null”,所以我不确定我是否正确实现了它?
var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );