5

我正在尝试为我的网站实现搜索功能。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: '/'
});
4

4 回答 4

5

对于这个问题,已经有几个针对 Backbone 的问题。有一个现有的插件可以很好地解决这个问题:

https://github.com/jhudson8/backbone-query-parameters

或者,我目前在与 Backbone 的路由匹配匹配的模拟 API 中使用查询字符串参数。看起来像这样

路线

"/api/v2/application/:query"

询问

application: function(query) {
  var params = $.deparam(query.slice(1));
  // params.something...
}

至于您手头的实际问题,您如何重定向index.html到支持pushState

于 2012-08-07T03:01:43.013 回答
2

我遇到了同样的问题并考虑使用骨干查询参数,但这通常应该被认为是一种不正确的方法。

url 查询字符串不适用于前端。当从 page.html 导航到 page.html?something=something 时,它们会被发送到服务器并强制刷新。

您应该改用哈希片段。即http://www.example.com/ajax.html#key1=value1&key2=value2然后只需以正常的主干方式获取这些值并从中构建您的请求参数。

请参阅https://github.com/jashkenas/backbone/issues/891https://developers.google.com/webmasters/ajax-crawling/docs/specificationhttps://www.rfc-editor.org/rfc /rfc3986#section-3.5

于 2014-03-26T19:22:44.873 回答
0

您始终可以通过 jQuery URL 插件读取 URL。它运作良好。

https://github.com/allmarkedup/jQuery-URL-Parser

于 2013-03-13T22:37:17.060 回答
-1

在极少数情况下,您需要读取 URL 并提取 GET 参数。我认为您做错了,这是我的选择:

1)如果您的应用程序中只有一个页面(单个应用程序页面),您可以在他们在您的input字段中键入或点击后显示结果submit

2)如果您将用户重定向到另一个页面,这意味着您可以引导数据,以便在页面加载后backbone只需要呈现您的结果,并且只有在您更改搜索词时才发出其他请求

3)您可以有一个javascript变量,该变量在页面加载时直接从服务器初始化,使用 GET 参数可能更容易

于 2012-08-07T15:55:10.123 回答