我正在尝试为我的网站实现搜索功能。当用户在foobar
框中键入搜索字词input
并提交时,系统会将其重定向到http://mydomain.com/search?query=foobar
。
问题:: 我应该如何从URL中获取GET参数query
,并将其发送到后端并以JSON响应的形式获取结果数组?我应该这样做吗?
我下面的当前尝试甚至不会导致search
功能被触发。
路由器
var AppRouter = Backbone.Router.extend({
routes: {
'search?query=:query': 'search'
// ... and some other routes
},
search: function(query) {
this.photoList = new SearchCollection();
var self = this;
this.photoList.fetch({
data: {query: query},
success: function() {
self.photoListView = new PhotoListView({ collection: self.photoList });
self.photoListView.render();
}
});
}
});
var app = new AppRouter();
Backbone.history.start({
pushState: true,
root: '/'
});
答案 0 :(得分:5)
针对此问题针对Backbone提出了几个问题。有一个现有的插件适用于此:
https://github.com/jhudson8/backbone-query-parameters
或者,我目前正在模拟API中使用查询字符串参数来匹配Backbone的路由匹配。看起来像这样
<强>路线强>
"/api/v2/application/:query"
<强>查询强>
application: function(query) {
var params = $.deparam(query.slice(1));
// params.something...
}
关于您手头的实际问题,如何重定向到index.html
以支持pushState
?
答案 1 :(得分:2)
我遇到了同样的问题,并考虑使用骨干查询参数,但这通常被视为不正确的方法。
url查询字符串不适用于前端。当从page.html导航到page.html?something = something。时,它们会被发送到服务器并强制刷新。
您应该使用哈希片段。即http://www.example.com/ajax.html#key1=value1&key2=value2然后只需将这些值作为正常的骨干方式,并从中建立您的请求参数。
请参阅https://github.com/jashkenas/backbone/issues/891,https://developers.google.com/webmasters/ajax-crawling/docs/specification,http://tools.ietf.org/html/rfc3986#section-3.5
答案 2 :(得分:0)
您始终可以通过jQuery URL插件阅读该网址。效果很好。
答案 3 :(得分:-1)
当您需要阅读URL并提取GET参数时,极少数情况下。我认为你做错了,这是我的选择:
1)如果您的应用中只有一个页面(单个应用页面),则可以在input
字段中输入结果或在submit
2)如果您要将用户重定向到另一个页面,这意味着您可以bootstrap data,以便在加载页面后backbone
只需呈现您的结果,并且只有您提出其他请求更改您的搜索词
3)你可以有一个javascript
变量在页面加载时直接从服务器初始化,在那里使用GET参数可能更容易