jQuery: как сделать URL-адрес, вызываемый jQuery.getJSON () видимым в адресной строке браузера? - PullRequest
1 голос
/ 20 апреля 2011

Я использую 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-адрес, отображаемый в адресной строке браузера, не изменяется независимо от того, какой URL-адрес GET.

Я хочу разрешить пользователям обмениваться поисковым URL по электронной почте или в Твиттере.Поэтому мне нужно, чтобы URL-адрес, загруженный jQuery.getJSON(), отображался в адресной строке браузера.Есть ли способ сделать это?

Спасибо.

Ответы [ 5 ]

1 голос
/ 20 апреля 2011

Звучит так, будто вы хотите html5 history api и history.pushState (). Хорошая рецензия на http://diveintohtml5.ep.io/history.html. Это будущее всей этой ерунды, которую разработчики предполагают ненавидеть, но в итоге используют, потому что до сих пор у нас не было pushstate.

Вы должны иметь возможность изменить URL, выполнив что-то вроде этого. window.history.pushState (data, "Title", "/ new-url"); К сожалению, IE9 пока не поддерживает его.

Для чего-то более кросс-браузерного я нашел это в stackoverflow - Кросс-браузерная история jquery ajax с window.history.pushState и отступлением

1 голос
/ 20 апреля 2011

Это возможно, но вам нужно немного усложнить.По сути, вы должны добавить что-то после хештега, например:

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/

0 голосов
/ 14 августа 2014

Это должен быть вопрос ajax-solr.Та же самая структура позволяет это с ParameterHashStore .

0 голосов
/ 20 апреля 2011

В адресной строке браузера отображается только адрес текущей веб-страницы или текст, вставленный пользователем.Вы не можете изменить его с помощью сценариев, если вы не измените location.href.

0 голосов
/ 20 апреля 2011

Это невозможно, поскольку это работает с использованием объекта xmlhttprequest (ajax).

Таким образом, запрос выполняется в фоновом режиме, без уведомления пользователя.

Вы можете сделать маленькую кнопку / что-нибудь с текстом: ссылку на этот поиск или что-то в этом роде, чтобы пользователи могли получить прямую ссылку на этот поиск, как это делают карты Google.

...