0

我正在提交一个使用 dojo 的 xhrpost。我的应用程序在 ruby​​ on rails 上运行。在控制器中,我正在执行重定向。我将重定向的 URL 存储在响应标头中。我在客户端访问重定向的 URL,然后在客户端加载重定向的 URL。以下是代码。

在视图中,使用 dojo.xhrpost 执行 ajax 提交

         function () {
         var form = dojo.byId("form_id");

         dojo.connect(form, "onsubmit", function(event){
          // Stop the submit event since we want to control form submission.
          dojo.stopEvent(event);

          var xhrArgs = {
            form: dojo.byId("form_id"),
            handleAs: "text",
            load: function(data, ioargs){
            //getting redirected url from response header
             var new_url = ioargs.xhr.getResponseHeader("new_url");

             //redirecting to the url  
             document.location.href = new_url;
            },
            error: function(response){
            //handling error
            }
         }

          //submitting for to action1 of controller
         var deferred = dojo.xhrPost(xhrArgs);
      });
    }


控制器中的代码

        def action1
          new_url = url_for(:controller=>"controller", :action => "action2")
          #passing the new URL as parameter in the redirection
          redirect_to :action2, :new_url => new_url
        end

        def action2
          #getting the new url from the params and saving it in respone header so that it can be accesses in client
          response.headers["new_url"] = params[:new_url]
        end


这在我的本地主机上运行良好。但是当我把它放在我的服务器上时它失败了。
我将 ioargs.xhr.status 设为“0”。数据是“”。尽管表单正在保存,但响应是空的,并且没有设置响应标头。
请帮忙。

4

1 回答 1

0

我不得不稍微修改一下控制器。

def action1
  if request.xhr?
    render :json => new_url.to_json
  else
  #follow normal redirection
  redirect_to :action2
end

也在ajax调用中

var xhrArgs = {
        form: dojo.byId("form_id"),
        handleAs: "json",
        load: function(data, ioargs){
        //getting redirected url from data 
         document.location.href = data;
        },
        error: function(response){
        //handling error
        }

基本上我发现以不正确的方式返回整个 HTML 页面作为响应。
响应中只应返回 URL,并且应从视图中完成重定向,

于 2013-03-24T17:20:18.143 回答