【问题标题】:How to: jQuery post to ashx file to force download of result?如何:jQuery 发布到 ashx 文件以强制下载结果?
【发布时间】:2010-06-24 11:24:28
【问题描述】:

我有一个 ashx 处理程序,它从请求中获取“html”属性,然后将其返回给调用它的任何内容。我还将 Content-Disposition 设置为附件。

直接调用页面按预期工作,通过另存为对话框强制下载。

我坚持的是:我需要从 javascript (jQuery) 执行此操作。我将发布一个 div 的内容并做一些进一步的处理。

有人能给我一些关于这是如何完成的指示吗?

非常感谢。

【问题讨论】:

    标签: jquery ashx


    【解决方案1】:

    我会(事实上,这样做:-))有一个带有隐藏字段的表单,将 div 的内容复制到该字段,然后将表单提交到隐藏的 (display: none) iframe。

    在页面上包含一个隐藏的 iframe:

    <iframe name="formTarget" src="blank.html" style="display: none">
    

    (例如,它最初是空白的。我实际上使用了一个 blank.html 文件,这正是它听起来的样子,而不是(比如说)about:blank,因为后者在某些情况下不能完全正确地工作;我不不记得细节了。)

    告诉表单提交到 iframe 并触发你的 ashx 文件:

    <form ... action="your.ashx" target="formTarget" ... >
    

    将div的内容复制到字段中:

    $("#fieldId").val($("#divId").html()); // Either .html() or .text(), depending on what you want
    

    提交表格:

    $("#formId").submit();
    

    (适当填写各种“...”。)

    在我的例子中,我展示了一个覆盖 div,告诉用户我在做什么,并启动一个计时器来监视 iframe 的内容(用于错误消息)和状态 cookie(有关更多信息,请参阅this answer饼干把戏)。叠加层会根据结果更新或删除。

    【讨论】:

    • iframe 的目标是一个页面,然后调用 ashx?否则,处理程序会在 iframe 呈现后立即运行。
    • 感谢您的帖子,但我仍然不确定如何实际实施?
    • @Paul:不,ashx 将是表单的操作。对于 iframe 的初始 src,我通常使用“blank.html”,这正是它听起来的样子(因为 about:blank 在某些浏览器上不太适用)。因此,您从隐藏的 iframe 开始(实际上)为空白,然后将数据提交到针对该框架的 ashx 文件,然后应该会触发下载。
    • 似乎对我不起作用.. html:
      jQuery: var str = $("
      one one 一二
      二一 二二
      "); $("#hiddenHtml").val($(str).html()); $("#formToGetExcel").submit();什么都没有发生。还有什么想法吗?谢谢
    • @Paul:我会用调试器来检查它在哪个阶段失败了。 (旁注——这不应该是问题——但$("#hiddenHtml").val( $(str).html() ); 正在调用$ 上已经是一个jQuery 对象的东西[str]。)它是否正确设置了隐藏值?它提交表格吗?等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多