从Jquery / Ajax MODx调用Snippet

时间:2011-08-14 00:08:09

标签: javascript jquery modx modx-revolution

我有一个select元素在更改事件上使用jQuery发布帖子,我试图将其发布到片段并返回结果,但是看起来如果直接从javascript调用代码片段将会没有($modx)对象的概念,我无法使用PDO访问数据库,我的代码如下:

$(document).ready(function() {

    $('#camplist').change(function() {

        $.post('core/components/evoprograms/snippets/register-camp.php?action=getCamp&id=' + $(this).val(), function(data) {
            $("camp-details").show();
            $('.result').html(data);
        });

    });

});

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

  

$。交('芯/部件/ evoprograms /片段/注册-camp.php

这不好 - 您不希望任何人访问/ core / *

下的任何内容

基本上有两种方式:

  1. 最简单的方法 - 创建一个资源(没有任何模板),只将您的代码段调用作为内容(未缓存!)。那么你。$ .post到那个资源。

  2. 革命方式(更干净,更好) - 使用您自己的连接器(/assets/components/evoprograms/connector.php)。 see this了解更多信息。或者只是复制任何现有的连接器并根据需要进行修改。

答案 1 :(得分:0)

您可以采用其他方式执行此操作 - 您可以在onchange事件中提交表单,并将表单action调用为所需的代码段...

例如,请参阅以下代码: -

<form action="[[!snippetname]]" method="POST">
  <h3>dropdown: 
    <select name="selection" onchange="this.form.submit();">
      <option>select</option>
      <option value="2">all</option>
     </select>
   </h3>
 </form>

这不需要任何javascript。

答案 2 :(得分:0)

将modx对象加载到core / components / evoprograms / snippets / register-camp.php脚本中,

define('MODX_API_MODE', true); 
// Full path to the index
require_once('/path/to/modx/public_html/index.php');
$modx = new modX();
$modx->initialize('mgr');
//your post
$your post here = $_POST['register'];