2016-12-11 3 views
0

У меня есть обычное приложение Rails (нет SPA), а на одной странице я использую Angular.
В конце я отправляю POST на сервер с данными формы (и он работает), а в качестве последнего шага POST я хотел бы перенаправить на другую страницу.Перенаправление с контроллера Rails после Angular POST

Rails контроллер выглядит так:

def save 
    data = params[:data] 
    respond_to do |format| 
    format.js { render :js => "window.location.href = '/products';" } 
    end 
end 

Но ничего не происходит.

Мой Угловая пост прост:

app.service('httpService', ['$http', function($http) { 
    this.post = function(data) { 
    $http({ 
     method : 'POST', 
     url  : '/cart/save', 
     data : { data: data }, 
     headers : {'Content-Type': 'application/json'} 
    }); 
    }; 
}]); 

Вызов службы так же, как это, не обещает:

this.save = function(ids) { 
    httpService.post(ids); 
}; 

Любые идеи? Благодарю.

EDIT:
Я попытался также изменить тип пантомимы для 'приложение/JavaScript', но не успех:

app.service('httpService', ['$http', function($http) { 
    this.post = function(data) { 
    $http({ 
     method : 'POST', 
     url  : '/cart/save', 
     data : { data: data }, 
     headers : {'Content-Type': 'application/javascript'} 
    }); 
    }; 
}]); 
+0

Есть ли конкретная причина, по которой вы не можете позволить отправке формы обращаться непосредственно в Rails? так что вы не выполняете вызов AJAX, но фактический запрос POST на сервер –

+0

Вы имеете в виду сообщение, сделанное form_tag, а не Angular? Потому что я выбираю/снимаю выделение значений в Angular, которые отправляются в POST. Есть ли способ передать угловые значения в «Rails» POST? –

+0

Мне нужно будет увидеть больше кода, чтобы точно понять проблему. В идеале вы должны иметь возможность манипулировать формой, чтобы она все еще работала как стандартная форма HTML, отправляемая в Rails –

ответ

0

Итак, проблема заключалась в том, что $ HTTP отправляет асинхронный запрос, таким образом, страница не может быть перенаправлена.

Решение было отправить jQuery синхронно $ .ajax (..., async: false);.

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