2012-03-12 60 views
0

我是一个网站在用户拖动文件到一个div上工作,并将该文件上传到通过AJAX(XHR 2级运行西纳特拉的服务器)。我想从西纳特拉的反应,如JSON,然后POST与来自JSON信息的另一个途径。这个POST应该会导致另一个页面被渲染。请在JavaScript POST请求并装载返回的页面(西纳特拉)

我把它给了我在哪里可以上传文件,并取回响应。剩下的我怎么办?

P.S:我不希望使用GET,因为有些信息不应该在URL中。

在此先感谢。

+0

你在JSON中返回什么?要显示的HTML,要加载的内容的URL? – JohnColvin 2012-03-13 00:04:01

+0

@JohnColvin我正在返回文件是否成功上传,以及文件的名称是否已被使用。 – V9801 2012-03-13 00:07:40

+0

嗯,这很复杂。为什么POST需要参与?你可以发回URL重定向到JSON,并让JavaScript做重定向。 – JohnColvin 2012-03-13 00:20:23

回答

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 2012-03-13 18:45:42