因此,假設我有一個Web應用程序,只是讓用戶保存他們的愛好。所以我有一種這樣的:jQuery自動完成與遠程JSON來源+谷歌應用程序引擎+ Python
class Hobby(ndb.Model):
hobby_name = ndb.StringProperty()
用戶只需創建一個使用這種形式的業餘愛好實體:
<form action="/new-hobby" method="post">
<input type="text" name="hobby_name" id="new-hobby" />
<input type="submit" value="Save New Hobby" />
</form>
那麼這個形式由該處理:
# Handles /new-hobby
class NewHobby(webapp2.RequestHandler):
def post(self):
hobby_name = self.request.get('hobby_name')
if hobby_name:
h = Hobby(hobby_name = hobby)
h.put()
app = webapp2.WSGIApplication([
('/new-hobby/?', NewHobby)
], debug=True)
這是標準的東西。通過這種設置,用戶可以通過多種方式進入相同的愛好(例如:「籃球」可以進入「籃球」)。這是通過增加所有用戶的「統一」輸入來實現自動完成功能的有用之處。
所以我決定用jQuery的多選遠程自動完成構件(http://jqueryui.com/autocomplete/#multiple-remote):
<script>
$(function() {
function split(val) {
return val.split(/,\s*/);
}
function extractLast(term) {
return split(term).pop();
}
$("#birds")
.bind("keydown", function(event) {
if (event.keyCode === $.ui.keyCode.TAB &&
$(this).autocomplete("instance").menu.active) {
event.preventDefault();
}
})
.autocomplete({
source: function(request, response) {
$.getJSON("search.php", {
term: extractLast(request.term)
}, response);
},
search: function() {
var term = extractLast(this.value);
if (term.length < 2) {
return false;
}
},
focus: function() {
return false;
},
select: function(event, ui) {
var terms = split(this.value);
terms.pop();
// add the selected item
terms.push(ui.item.value);
terms.push("");
this.value = terms.join(", ");
return false;
}
});
});
</script>
遠程源上面的代碼中所指定的行$.getJSON("search.php",...);
。
因此,假設我在正確的軌道上,問題是:我應該用什麼文件替換search.php
,以及該文件應該包含哪些內容?
謝謝你的答案泰耶。在進一步的研究中,我意識到'suggestHobbies.php'應該包含一個「like」查詢。你知道使用Python,NDB查詢和GAE可能看起來像什麼嗎? – puoyaahhh 2014-10-13 17:32:55