【问题标题】:Ajax in a Joomla 3.x component's viewJoomla 3.x 组件视图中的 Ajax
【发布时间】:2014-12-31 08:47:15
【问题描述】:

我正在为 Joomla 3.x 构建一个组件,但在处理 ajax 请求时遇到了问题。 源码在 Github 上:JomCity

我的请求来自venues 视图:/com_jomcity/site/views/venues/tmpl/default.php

<script type="text/javascript">
  jQuery(document).ready(function () {
    jQuery('#main_search_request').keyup(function() {
      var request_content = jQuery(this).val();
      jQuery.get(
        // Specify the server URL and the $_GET datas to send
        'index.php?option=com_jomcity&task=searchVenues&format=json',
        { search: request_content },
        // The server will respond with some data encoded in JSON
        function(data){
          jQuery('#results').html('');
          for (var i = 0; i < data.venues.length; i++) {
            var venue = data.venues[i];
            console.log(venue);
            jQuery('#results').append(
              '<div class="grid-item">' +
                '<a href="#">' +
                  '<img src="http://placekitten.com/g/80/80" alt="">' +
                  '<div>' +
                    '<div>' +
                      '<h3>'+venue.name+'</h3>' +
                      '<span>* * * * *</span>' +
                    '</div>' +
                    '<div>Short descrption</div>' +
                  '</div>' +
                '</a>' +
              '</div>'
            );
          }
        }
      );
    });
  });
</script>

这个 ajax 脚本与组件的主控制器(站点部分)通信,所以我想知道如何从模型 com_jomcity/site/models/venues.php 中获取值。

这段代码可以吗?或者我应该在视图的控制器中处理 ajax 请求(我没有找到怎么做)?

【问题讨论】:

标签: ajax model-view-controller joomla


【解决方案1】:

感谢@Torreto 和@GDP 的参与。

我最后继续在主控制器中创建一个直接与数据库交换的任务,因此没有使用任何模型。我认为应该存在一种更好、更简洁的方式来编写这个 ajax 调用,所以我愿意接受任何进一步改进的建议。

我使用的代码,如果它可以帮助某人:

/com_jomcity/site/views/venues/tmpl/default.php:

<script type="text/javascript">
  jQuery(document).ready(function () {
    jQuery('#main_search_request').keyup(function() {
      var request_content = jQuery(this).val();
      jQuery.get(
        // Specify the server URL and the $_GET datas to send
        'index.php?option=com_jomcity&task=searchVenues&format=json',
        { search: request_content },
        // The server will respond with some data encoded in JSON
        function(data){
          // Clean the #result div between two search results
          jQuery('#results').html('');
          // Read and display each objects returned in the json response
          for (var i = 0; i < data.length; i++) {
            var venue = data[i];
            jQuery('#results').append(
              '<div class="grid-item">' +
                '<a href="#">' +
                  '<img src="http://placekitten.com/g/80/80" alt="">' +
                  '<div>' +
                    '<div>' +
                      '<h3>'+venue.en_name+'</h3>' +
                      '<span>* * * * *</span>' +
                    '</div>' +
                    '<div>Short descrption</div>' +
                  '</div>' +
                '</a>' +
              '</div>'
            );
          }
        }
      );
    });
  });
</script>

/com_jomcity/site/controller.php:

class JomCityController extends JControllerLegacy
{
    /**
     * Search in all the venues
     * @return string The message to be displayed to the user
     */
    public function searchVenues() {
        if (isset($_GET['search'])) {
            // Get a db connection
            $db = JFactory::getDBO();
            // Create a new query object
            $query = $db->getQuery(true);
            // Select all records from the jomcity_venues_items table
            // Where the name or the description correspond to the user's search keywords
            // Order it by the en_score field
            $query
                ->select('*')
                ->from('#__jomcity_venues_items')
                ->where('`local_name` like "%'.$_GET['search'].'%" OR `en_name` like "%'.$_GET['search'].'%" OR `description` like "%'.$_GET['search'].'%"')
                ->order('en_name ASC');
            // Reset the query using our newly populated query object
            $db->setQuery((string)$query);
            // Load the results as a list of stdClass objects.
            $this->venues = $db->loadObjectList();
        }
        echo json_encode($this->venues);
    }
}

【讨论】:

    猜你喜欢
    • 2014-06-01
    • 2014-02-20
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多