1

我使用ajax-solr作为 Solr 搜索的前端。为了获得搜索结果,ajax-solr使用来自服务器jQuery.getJSON()GET特定 URL。相关代码在这里

AjaxSolr.Manager = AjaxSolr.AbstractManager.extend(
  /** @lends AjaxSolr.Manager.prototype */
  {
  executeRequest: function (servlet) {
    var self = this;
    if (this.proxyUrl) {
      jQuery.post(this.proxyUrl, { query: this.store.string() }, function (data) { self.handleResponse(data); }, 'json');
    }
    else {
      jQuery.getJSON(this.solrUrl + servlet + '?' + this.store.string() + '&wt=json&json.wrf=?', {}, function (data) { self.handleResponse(data); });
    }
  }
});

问题是浏览器地址栏中显示的 URL 无论GETURL 是什么都不会改变。

我希望允许用户通过电子邮件或 Twitter 共享搜索 URL。所以我需要使加载的 URLjQuery.getJSON()在浏览器地址栏中可见。有没有办法做到这一点?

谢谢。

4

5 回答 5

1

这是可能的,但你必须变得更复杂一些。基本上,您必须在主题标签之外添加一些内容,如下所示:

www.mysite.com/searchWithAjax#customData

然后,在页面加载时,您可以阅读 # 之后的内容并使用该信息执行 ajax 搜索。要访问 # 之后的内容,只需使用 location.hash:http ://www.w3schools.com/jsref/prop_loc_hash.asp

不幸的是,location.hash 在匿名的 jsFiddle 中有点难做。看看这个人的例子,我认为它几乎正是你所需要的,你可以通过查看源代码来获取代码:

http://jsfiddle.net/cowboy/CukUH/show/

还有一篇关于基本技术的非常古老的文章:

http://aspektas.com/blog/using-the-location-hash-with-ajax/

于 2011-04-19T20:35:20.997 回答
1

听起来您想要 html5 历史 API 和 history.pushState()。http://diveintohtml5.ep.io/history.html上有一篇很好的文章。这是开发人员应该厌恶但最终使用的所有 hashbang 废话的未来,因为到目前为止我们还没有 pushstate。

您应该能够更改 url 做这样的事情。window.history.pushState(data, "Title", "/new-url"); 不幸的是,IE9 还不支持它。

对于更多跨浏览器的东西,我在 stackoverflow 上找到了这个 - Cross-browser jquery ajax history with window.history.pushState and fallback

于 2011-04-19T20:47:55.660 回答
0

这是不可能的,因为这使用 xmlhttprequest (ajax) 对象。

所以请求是在后台发出的,没有用户通知。

你可以用文本做一个小按钮/东西:链接到这个搜索,或者类似的东西,让用户可以直接链接到这个搜索,就像谷歌地图一样。

于 2011-04-19T20:29:29.547 回答
0

浏览器的地址栏只显示当前网页的地址或用户插入的文本。你不能通过脚本来改变它,除非你改变它location.href

于 2011-04-19T20:31:58.520 回答
0

这应该是一个 ajax-solr 问题。相同的框架允许使用ParameterHashStore进行此操作。

于 2014-08-13T22:17:07.380 回答