2013-10-27 38 views
0

我有一个自动完成功能,可以帮助我在向数据库插入行时更快地添加关键字。内部函数我有一个变量,我已经存储了所有用于建议的关键字。在将数据行插入到数据库之后,使用AJAX从数据库中获取所有关键字,包括刚才添加的行中的关键字。jQuery:如何修改函数内部的变量

问题是我想通过添加我刚刚从数据库中使用AJAX获得的关键字来修改存储旧关键字的变量。

下面是代码:

var autocompleteKeywords = [ 'keyword 1', 'keyword 2', 'keyword 3' ]; 

// Autocomplete tags 
$('#search_keyword').autocomplete({ 
    maxHeight: 400, 
    width: 200, 
    lookup: autocompleteKeywords 
}); 

我想用新的关键字,我和AJAX得到修改的变量是autocompleteKeywords

这里是AJAX:

$.ajax({ 
    url: "ajax_actions.php", 
    type: "GET", 
    data: { action: "select_keywords" }, 
    dataType: "json", 
    async: false, 

    success: function(result) 
    { 
     autocompleteKeywords = result.keywords; 
    } 
}); 
+0

请注意,未来的关键字autocompleteKeywords不是一个变量,它是一个数组文字。 –

+0

或可能是一个变量,它是通过对数组文字的引用实例化的:),可能取决于它运行的是什么javascript引擎,以及何时进行描述:) –

+0

@EricHerlitz我知道,我想说我想要当前数组的关键字将被其他更新的数组替换为使用AJAX获得的关键字。 – sorinu26

回答

2

你并不需要自己处理的数据源,有可能满足您的需要jQuery UI的自动完成功能的optition:

看一看:http://jqueryui.com/autocomplete/#remote

$("#birds").autocomplete({ 
     source: "search.php", 
     minLength: 2, 
     select: function(event, ui) { 
     log(ui.item ? 
      "Selected: " + ui.item.value + " aka " + ui.item.id : 
      "Nothing selected, input was " + this.value); 
     } 
    }); 

或在这里:http://jqueryui.com/autocomplete/#remote-jsonp

$("#city").autocomplete({ 
    source: function(request, response) { 
    $.ajax({ 
     url: "http://ws.geonames.org/searchJSON", 
     dataType: "jsonp", 
     data: { 
     featureClass: "P", 
     style: "full", 
     maxRows: 12, 
     name_startsWith: request.term 
     }, 
     success: function(data) { 
     response($.map(data.geonames, function(item) { 
      return { 
      label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName, 
      value: item.name 
      } 
     })); 
     } 
    }); 
    }, 
    minLength: 2, 
    select: function(event, ui) { 
    log(ui.item ? 
     "Selected: " + ui.item.label : 
     "Nothing selected, input was " + this.value); 
    }, 
    open: function() { 
    $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); 
    }, 
    close: function() { 
    $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); 
    } 
}); 
+0

从开始,我喜欢从数据库获取所有关键字,并让插件从列表中选择建议。我认为它更快。 – sorinu26

0

从你的描述假设要添加从数据库

在我的opinon最好的办法是从数据库连接具有传入值默认阵列

success: function(result) { 
    autocompleteKeywords = [].concat(autocompleteKeywords, result.keywords) 
} 
+0

我想用我从AJAX获得的数组替换当前数组,该数组已用添加的行中的关键字进行更新。 – sorinu26

+0

问题是数组保持不变,没有变化。不添加带有新关键字的新阵列。我认为它需要类似“重置”的东西? – sorinu26