2012-06-05 2 views
0

Я пытаюсь реализовать AJAX с shebang - это означает, что example.com/#!/somepage.php просто example.com/somepage.php загружен в область содержимого сайта AJAX.Обработка ответа AJAX в качестве документа?

Очевидный способ сделать это - просто запросить somepage.php, а затем заменить все содержимое documentElement на новый документ. Однако это похоже на то, чтобы победить цель AJAX.

Вместо этого я собираюсь загрузить somepage.php, а затем извлечь часть страницы content и просто поместить ее в область содержимого.

Чтобы сделать это, я мог использовать регулярное выражение для поиска /<div id="content">.*</div>/, но это было бы очень плохая идея (самая простая проблема, являющаяся «, которая </div> заканчивается содержание?). Вместо этого, я хотел бы быть в состоянии просто сделать что-то вроде ajaxresponse.getElementById('content'), но как бы я идти о преобразовании ajaxresponse в document (или documentFragment) объекта?

или это просто неправильный подход к реализации такой установки AJAX? Я был бы лучше с сервера боковая проверка на X-Requested-With: XMLHttpRequest и только отправьте обратно содержимое области?

+1

является в том числе 'jQuery' к не так ли? С jQuery Ajax ['.load()'] (http://api.jquery.com/load/): '$ ('# result'). Load ('ajax/test.html #container');'. Я знаю, что вы должны знать, что лучше меня, есть ли проблема с 'shebang' и jQuery? –

+0

Не мог ли ваш обработчик '#!' Просто сделать другой запрос, чем страницу дословно? Например, когда '#!' Обрабатывает '/ somepage.php', запросите' /somepage.php? Json' (который возвращает что-то удобное в использовании). – cheeken

+0

С чистым JS вы также можете добавить запрошенную страницу к скрытому элементу (или просто создать его на лету), а затем захватить загруженный контент div через 'getElementById'. –

ответ

1

Вместо того, чтобы запрашивать #! 'd стр. Ст., Запросите вариант, совместимый с вашим обработчиком #!.

Этот подход выполняет два шага.

  1. Экспозиция ваших страниц контента через JSON. Сделайте эту услугу доступной для запросов, удовлетворяющих определенному условию, таких как специальный параметр get, расширение, заголовок и т. Д. Например, /somepage.php?json может обслуживать содержимое /somepage.php в JSON.

  2. Напишите обработчик #!, чтобы при обработке запроса он вызывал службу, определенную выше для этой страницы. Например, когда загружается example.com/#!/somepage.php, и вы обрабатываете somepage.php, тогда запросите somepage.php?json и размножайте содержимое этого запроса соответствующим образом.

Этот подход дает вам ряд преимуществ.

  • Уменьшенный размер ответа запроса AJAX
  • Уменьшенный на стороне сервера нагрузки, так как нет HTML не нужно быть оказаны
  • Избегает HTML парсинг и некоторые дорогие DOM манипуляции
  • Нет зависимости от браузера, чтобы отправить соответствующий AJAX связанные с заголовком
+0

(Я разместил это как комментарий, но подумал, что я мог бы также помочь ему ответить.) – cheeken

+0

Спасибо за советы :) –

0

Обратите внимание, что на самом деле вам не нужно использовать регулярное выражение для получения содержимого из возвращаемых данных.С помощью JQuery, например, это просто вопрос об использовании context аргумента $ селектора (live fiddle)

$.get("/", {}, function(data){ 
    $("#text").append($("#login", data)); 
});​ 

Также отмечу, что притон навигация часто ассоциируются с какими-то рамками Javascript

Смежные вопросы