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 に答える