2012-03-12 10 views
0

私は、ユーザーがファイルをdivにドラッグし、Sinatraを実行しているサーバーにAJAX(XHRレベル2 )。 Sinatraからの応答をJSONとして取得し、POSTを別のルートにJSONからの情報で取得したいとします。このPOSTにより、別のページがレンダリングされるはずです。JavaScriptでPOSTリクエストを行い、返されたページを読み込みます(Sinatra)

私はファイルをアップロードできる場所に持ってきて、応答を返します。どうすれば残りのことができますか?

P.S:一部の情報がURLに含まれていないため、GETを使用したくありません。

ありがとうございます。

+0

JSONであなたの復帰は何ですか?表示されるHTML、ロードするコンテンツのURL? – JohnColvin

+0

@JohnColvinファイルが正常にアップロードされたかどうか、ファイルの名前が既に使用されているかどうかを返信しています。 – V9801

+0

うん、それはかなり複雑です。なぜPOSTは関与する必要がありますか? JSONでリダイレクトするURLを送り返し、javascriptでリダイレクトすることもできます。 – JohnColvin

答えて

0

あなたの望む通りではありません。その後のPOSTコールでJSONデータを文字列として取得する必要があります。 アイデアは、フォーム要素を即座に作成し、それを使って後続のPOST呼び出しを行うことです。実際のユースケースと値 - キーでコントローラのコードを交換する必要がありますjavascriptのコード

$.post("/test1/frm", {param1 : "param"}, function(d){ 
    if(d.success) { 
    // subsequent POST call on success use commented code in case subsequent request is XHR 
    //$.post(d.url, d.response_data, function(dd){/*callback if any*/}); 
    var frm = $("<form method='POST'>").attr("action", d.url).append($("<input name='data'>").attr("value", JSON.stringify(d.response_data))); 
    frm.submit(); 
    } 
}); 

コントローラコード

post :frm do 
    logger.debug params.inspect 
    content_type :json 
    {:success => true, :url => "/test1/frm_post", :response_data => {:a => :b}}.to_json 
end 
post :frm_post do 
    logger.debug params.inspect 
    "success" 
end 

+0

ありがとう、これは素晴らしいです! – V9801

関連する問題