Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.02.2013, 15:13
Интересующийся
Отправить личное сообщение для someone Посмотреть профиль Найти все сообщения от someone
 
Регистрация: 25.09.2012
Сообщений: 21

Как заменить всё содержимое страницы? AJAX/JQuery
Добрый день. Нубский вопрос. Сделал ajax запрос (с целью полной замены <form> на <select>) через событие onchange элемента списка формы, получил в ответ всю полную страницу. Хочу заменить содержимое текущей страницы на содержимое ответа(использую метод $.ajax({complete : complete}) ), без перезагрузки страницы(без location.reload() ). Пока не получается сделать без ошибок.

Код:
$('form.translation>select').on('change', function(){ // ajax запрос на изменение перевода
        var csrftoken = $.cookie('csrftoken');
        var lang = $('form.translation>select').val();

        function complete(jqXHR) {
            alert($(jqXHR.responseText).filter('body'));  // тут ошибка: throw new Error( "Syntax error, unrecognized expression: " + msg );
//            $('body').html($(jqXHR.responseText).filter('body'));
        }

        $.ajax({
            url: '/translate/',
            type: 'POST',
            headers: {'X-CSRFToken': csrftoken},
            data: {lang: lang},
            complete: complete
        })
//        location.reload();

    })


Вот форма на всякий:
<form action="/translate/" method="POST" class="form-inline pull-right translation" style="margin-bottom: 0px;">
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='SgVdbKyGNHWcLohomtDJSsd2t8tA6CLp' /></div>
        <label for="id_lang">Language:</label><select name="lang" id="id_lang">
        <option value="ru">Русский</option> 
        <option value="en" selected="selected">English</option>
        </select>
        <input type="submit" class="btn" value="Change">
    </form>


Подскажите как можно сделать корректно? При использовании location.reload() вроде всё работает без нареканий.
Ответить с цитированием
  #2 (permalink)  
Старый 15.02.2013, 15:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от someone
получил в ответ всю полную страницу
А зачем? Нужно на сервере проверять заголовок X-Requested-With на значение XMLHttpRequest и отдавать не целиком страницу, а только обновляемую часть. Зачем менять всю страницу через ajax? это же равносильно location.reload()
Ответить с цитированием
  #3 (permalink)  
Старый 15.02.2013, 15:44
Интересующийся
Отправить личное сообщение для someone Посмотреть профиль Найти все сообщения от someone
 
Регистрация: 25.09.2012
Сообщений: 21

Всё просто, я только начал изучать клиентское программирование... Понимаю, что экономии от этого никакой, но как бы за меня никто не сделает и меня никто не научит) потоэтому шагаю как могу)

К тому же, в этом случае дело касается перевода страницы. Наверно это как то нужно делать через json... Не всё сразу...
Про заголовок спасибо, буду знать...
Ответить с цитированием
  #4 (permalink)  
Старый 15.02.2013, 15:46
Интересующийся
Отправить личное сообщение для tktl Посмотреть профиль Найти все сообщения от tktl
 
Регистрация: 07.09.2011
Сообщений: 22

О блин. Ну и вопрос. Я не понял. Совершенно.

Я не пойму причем здесь Ajax вообще.
Если надо заменить какой-то элемент (хоть body, хоть html) находите его в DOM. Потом можно удалить или заменить содержимое на свое.

Про ajax запрос - можно указать тип ожидаемого ответа. Судя по всему вы ожидаете html, а получаете скорее всего text.

function complete(data) {
    var body = $(data).filter('body');
    //какой-то код
}


Но вообще - это жесть, что у Вас там написано.
Ответить с цитированием
  #5 (permalink)  
Старый 15.02.2013, 15:50
Интересующийся
Отправить личное сообщение для someone Посмотреть профиль Найти все сообщения от someone
 
Регистрация: 25.09.2012
Сообщений: 21

Цитата:
Я не пойму причем здесь Ajax вообще
Хочу заменить форму на обычный <select>
Ответить с цитированием
  #6 (permalink)  
Старый 15.02.2013, 15:54
Интересующийся
Отправить личное сообщение для tktl Посмотреть профиль Найти все сообщения от tktl
 
Регистрация: 07.09.2011
Сообщений: 22

посмотрите какой вам ответ от сервера приходит
function complete(data) {
    console.log(data);
}

в консоли будет написано
Ответить с цитированием
  #7 (permalink)  
Старый 15.02.2013, 15:56
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Тогда уж проще делать перенаправление на переведенную страницу. Тот же google translate не делает топорную замену body.innerHTML целиком. Там идет работа с каждым элементом, причем учитывается атрибут translate каждого элемента
Ответить с цитированием
  #8 (permalink)  
Старый 15.02.2013, 16:01
Интересующийся
Отправить личное сообщение для someone Посмотреть профиль Найти все сообщения от someone
 
Регистрация: 25.09.2012
Сообщений: 21

Сообщение от danik.js Посмотреть сообщение
Тогда уж проще делать перенаправление на переведенную страницу. Тот же google translate не делает топорную замену body.innerHTML целиком. Там идет работа с каждым элементом, причем учитывается атрибут translate каждого элемента
Т.е. пока проще оставить location.reload() ??
Ответить с цитированием
  #9 (permalink)  
Старый 15.02.2013, 16:15
Интересующийся
Отправить личное сообщение для tktl Посмотреть профиль Найти все сообщения от tktl
 
Регистрация: 07.09.2011
Сообщений: 22

danik.js
Восхищаюсь Вами.
Я только из Ваших ответов понял суть вопроса

+100
Ответить с цитированием
  #10 (permalink)  
Старый 15.02.2013, 16:19
Интересующийся
Отправить личное сообщение для someone Посмотреть профиль Найти все сообщения от someone
 
Регистрация: 25.09.2012
Сообщений: 21

Оставил location.reload(). Тема закрыта
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как "достать" все объекты документа macdack Общие вопросы Javascript 39 13.10.2012 23:47
Как получить все атрибуты <input> Kotakota jQuery 7 08.10.2012 18:22
Как передать код html страницы из фрейма на сервер vuler Общие вопросы Javascript 5 20.02.2012 16:31
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37
Как выдавать ошибку при сбросе загрузки страницы? AvaGet Общие вопросы Javascript 2 11.12.2008 19:04