JQuery.post (): как я читаю перенаправление с сервера? - PullRequest
2 голосов
/ 14 апреля 2011

Я пробую свои силы в ненавязчивом JS, используя JQuery в своем приложении Ruby On Rails.

После того, как пользователь заполняет форму, код JQuery на стороне клиента вызывает:

$.post("/premises", ui.form)

Я вижу, как POST достигает сервера, и я вижу, что сервер отправляет уведомление о перенаправлении на http://localhost:3000/users/42 вместе с данными для отображения.

Но страница браузера неменять.Это на самом деле меня не удивляет - весь смысл javascript на стороне клиента состоит в том, чтобы контролировать то, что обновляется - я понимаю это.Но в этом случае я хотел бы соблюдать все, с чем сервер отвечает.

Я попытался расширить вызов post () на основе Как управлять запросом на перенаправление после вызова jQuery Ajax :

$.post("/premises", 
       ui.item,  
       function(data, textStatus) {
           if (data.redirect) {
               // data.redirect contains the string URL to redirect to
               window.location.href = data.redirect;
           } else {
               // data.form contains the HTML for the replacement form
               $("#myform").replaceWith(data.form);
           }
       });

... но (среди прочих проблем) data.redirect не определен.Я подозреваю, что реальный ответ прост, верно?С нетерпением жду этого!

Ответы [ 3 ]

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

Пост, на который вы ссылаетесь, использует JSON в качестве возвращаемого значения, и он создает этот json на стороне сервера. это означает, что при перенаправлении ваш объект данных будет выглядеть как

{redirect:'redirecturl.html'}

и если это не перенаправление, объект данных будет выглядеть как

{form:html-string-for-form}

Теперь задача состоит в том, чтобы создать объект json соответствующим образом на стороне сервера

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

data.redirect, вероятно, не определен, потому что вы не указываете его на стороне сервера.В ответе, который вы указали на вопрос, сервер должен всегда отвечать 200 независимо от результата, а затем отправляемое им тело JSON определяет реакцию клиента.Итак, на стороне сервера вы хотите ответить {"redirect" : "/where/to/go"}

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

Сервер сообщает, что данные, которые вы хотите обработать с помощью JavaScript, доступны по другому URL-адресу, а не что браузер должен загрузить новый документ в фрейм верхнего уровня. Отправка браузера по URL-адресу, на котором ему сообщалось, что данные, которые он запрашивал с помощью JS, не будет учитывать перенаправление.

Если вы хотите сделать это, то сервер должен ответить данными (в теле ответа), которые JavaScript интерпретирует как причину для назначения нового значения для location.

...