尝试打开从ajax检索的数据以自动下载

时间:2012-03-13 21:14:29

标签: javascript ajax jquery

现在,我有一个webapp,它使用jquery ajax进行调用(使用params,从调用通过表单调用)到我的后端并检索xml文件。我想将xml数据放入具有不同扩展名的私有应用程序的文件中。

基本上我只希望用户能够点击一个按钮,它会自动提示他们"打开或保存" 包含返回的ajax xml数据的文件。

我已经涉及使用php发送原始http标头,但我无法弄清楚如何让它工作。 我在javascript和jquery中写了所有这些。

以下代码的唯一功能是(1)进行Ajax调用,(2)将XML写入HTML页面,(3)打开HTML页面。

var format = function() {   
  $("button#format").click(function() {
    $("#form").submit();
    $.ajax({
      url: "find",
      beforeSend: function (xml) {
        xml.overrideMimeType("application/octet-stream; charset=x-user-defined");
      },
      data: $("form#form").serialize(),
      dataType: "html",
      success: function(xml) {
        xmlWindow = window.open("download.ivml");
        xmlWindow.document.write(xml);
        xmlWindow.focus();
      },
      error: function(request) {
        $("#webdiv").html(request.responseText);
      }
    });
  });
};

1 个答案:

答案 0 :(得分:0)

没有必要强迫这样的东西进入AJAX范例,除非你需要在为用户提供之前使用你检索的数据,然后再次,这应该可以在php中完成。所以我会做这样的事情:

<form id="format" action="download.ivml" target="_blank">
...
</form>

在jquery中修改action就像这样

​$('#format')​.submit(function(){
    // tweaking the post data, otherwise this whole block is not needed.
    return true;    
})​;

最后在我的服务器上使用.htaccess文件来处理那个奇怪的网址download.ivml

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)download.ivml$  /path/to/where/I/process/the/request

不太确定这个最后.htaccess文件的语法。