【问题标题】:Call Snippet From Jquery/Ajax MODx从 Jquery/Ajax MODx 调用代码片段
【发布时间】:2011-08-14 00:08:09
【问题描述】:

我有一个选择元素,它在更改事件上使用 jQuery 进行发布,我试图将其发布到 sn-p 并返回结果,但似乎如果直接从 javascript 调用 sn-p将没有 ($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);
        });

    });

});

什么是正确的做法?

【问题讨论】:

  • 如果您告诉我们问题出在哪里,并且可能发布一些相关的html和php,那么想出一个解决方案会更容易。 :)
  • 问题只是从 modx 前端进行 AJAX 调用并接收和调用 backendm 问题是我无法直接从前端调用 sn-p跨度>

标签: javascript jquery modx modx-revolution


【解决方案1】:

$.post('core/components/evoprograms/sn-ps/register-camp.php

这不好 - 你不希望任何人访问 /core/* 下的任何内容

基本上有两种方式:

  1. 最简单的方法 - 创建一个资源(没有任何模板),其中只有您的 sn-p 调用作为内容(未缓存!)。然后你 $.post 到那个资源。

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

【讨论】:

    【解决方案2】:

    您可以通过其他方式执行此操作,例如 - 您可以在 onchange 事件上提交表单并提供表单 action 以调用所需的 sn-p...

    例如看下面的代码:-

    <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。

    【讨论】:

    • 其实 'this.form.submit()' 是 JavaScript ;^)
    【解决方案3】:

    在你的 core/components/evoprograms/sn-ps/register-camp.php 脚本中加载 modx 对象,

    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'];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      相关资源
      最近更新 更多