【问题标题】:jquery @mentions input ajax functionjquery @mentions 输入 ajax 函数
【发布时间】:2013-02-14 07:07:30
【问题描述】:

我正在尝试使用http://podio.github.com/jquery-mentions-input/ 将@mentions 功能添加到我的网站。我正在尝试使用 ajax 从查询数据库 onkeyup 的 .php 文件中获取 JSON 响应,但我不知道在代码中的何处放置 ajax 调用。

我知道我要求人们基本上为我做这项工作,但我快死了,我已经尝试了大约 2-3 天了

这是插件中的两个 JavaScript 函数,我只是一个示例 ajax 函数,它将链接到我的 PHP 脚本,用于搜索用户 %LIKE% 查询。

插件的基本示例

$(function () {
$('textarea.mention').mentionsInput({
onDataRequest:function (mode, query, callback) {
var data = [
{ id:1, name:'Kenneth Auchenberg', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
{ id:2, name:'Jon Froda', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
{ id:3, name:'Anders Pollas', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
{ id:4, name:'Kasper Hulthin', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
{ id:5, name:'Andreas Haugstrup', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
{ id:6, name:'Pete Lacey', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
{ id:7, name:'kenneth@auchenberg.dk', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
{ id:8, name:'Pete Awesome Lacey', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
{ id:9, name:'Kenneth Hulthin', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' }
];
data = _.filter(data, function(item) { return item.name.toLowerCase().indexOf(query.toLowerCase()) > -1 });
callback.call(this, data);
}
});
$('.get-syntax-text').click(function() {
$('textarea.mention').mentionsInput('val', function(text) {
alert(text);
});
});
$('.get-mentions').click(function() {
$('textarea.mention').mentionsInput('getMentions', function(data) {
alert(JSON.stringify(data));
});
}) ;
});

AJAX 示例(我不知道如何从 .php 文件中获取 JSON)

$(function () {
$('textarea.mention-example2').mentionsInput({
onDataRequest:function (mode, query, callback) {
$.getJSON('assets/data.json', function(responseData) {
responseData = _.filter(responseData, function(item) { return item.name.toLowerCase().indexOf(query.toLowerCase()) > -1 });
callback.call(this, responseData);
});
}
});
});

【问题讨论】:

  • 使用 this 对服务器或 php 文件进行 ajax 调用

标签: php jquery ajax json


【解决方案1】:

我想通了,我只是添加了一个带有查询值的变量查询,并将其发送到我的脚本,然后搜索数据库并将结果发回

$('textarea.mention-example2').mentionsInput({
onDataRequest:function (mode, query, callback) {
    var myquery = 'query='+query;
  $.getJSON('data.php', myquery, function(responseData) {
    responseData = _.filter(responseData, function(item) { return item.name.toLowerCase().indexOf(query.toLowerCase()) > -1 });

    callback.call(this, responseData);
  });
}

});

【讨论】:

    【解决方案2】:

    我在Gitpage 上阅读了一些关于插件的信息,我不确定你有什么,但这是你让它工作所需要的:

    jQuery js 文件和插件脚本。

    JS代码:

    $(function () {  
        $('textarea.mention-example2').mentionsInput({    
            onDataRequest:function (mode, query, callback) { 
                $.getJSON('assets/data.json', function(responseData) {        
                    responseData = _.filter(responseData, function(item) { 
                        return item.name.toLowerCase().indexOf(query.toLowerCase()) > -1 });                   callback.call(this, responseData);      
                });
            }  
        });
    }); 
    

    文件夹 assets 中的 JSON 文件,文件名为 data.json 'assets/data.json':

    [
        {        
            "id": 1,
            "name": "Kenneth Auchenberg",
            "avatar": "http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif",
            "type": "contact"    
        }
    ]
    

    现在你只需要一个带有类mention-example2 的textarea。您可能还需要一些 css 文件。但是试试这个,然后回来反馈。

    【讨论】:

      【解决方案3】:

      这就是我在codeigniter中所做的

      创建一个为我获取数据的函数

      function getDataMention(mode, query, callback){
                var path = '<?=site_url()?>users/get_user_search_string/'+query;
                $.ajax({
                  url: path,
                   dataType: 'json', // Choosing a JSON datatype
                }).done(function(retdata) {
                 var data = retdata;
                 data = _.filter(data, function(item) {return item.name.toLowerCase().indexOf(query.toLowerCase()) > -1 });
                 callback.call(this, data);
                });                      
      }//end getDataMention();
      

      然后在文档就绪时调用库

      $('textarea.mention').mentionsInput({
              onDataRequest:getDataMention,
              minChars: 1,
              templates:{
                wrapper: _.template('<div class="mentions-input-box"></div>'),
                autocompleteList: _.template('<div class="mentions-autocomplete-list"></div>'),
                autocompleteListItem: _.template('<li data-ref-id="<%= id %>" data-ref-type="<%= type %>" data-display="<%= display %>"><%= content %></li>'),
                autocompleteListItemAvatar : _.template('<img src="<%= avatar %>" />'),
                autocompleteListItemIcon: _.template('<div class="icon <%= icon %>"></div>'),
                mentionsOverlay: _.template('<div class="mentions"><div></div></div>'),
                mentionItemSyntax: _.template('@[<%= value %>](<%= type %>:<%= id %>)'),
                mentionItemHighlight: _.template('<a target="__blank" class="mlink" href="<?=site_url()?>users/profile/profile_id=<%= id %>"><%= value %></a>')
              }
            });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多