【问题标题】:Change iFrame src on ajax complete在 ajax 上更改 iFrame src 完成
【发布时间】:2011-04-12 11:49:12
【问题描述】:

使用 jQuery 的 $.ajax() 我想从服务器检索一些信息,然后根据该信息更改 iframe 的 src 属性。

类似:

$.ajax(
                {
                    url: "someUrl.aspx/getInfo",
                    dataType: "json",
                    data: "{'data':{'data1':'data1'}}",
                    type: "post",
                    contentType: "application/json; charset=utf-8",
                    complete: function(data, stat) {
                        if (stat == "success" ) 
                        {
                           var src = JSON.parse(jsondata.responseText).d.src
                           $('#myframe').attr("src",src);
                        } 

                    }
                }
                );

我尝试加载的页面正在返回一个 PDF 文件,因此目标是向用户显示一个对话框,让他们在下载或打开该文件之间进行选择。在 IE7 和 8 上,浏览器显示带有以下消息的信息栏:“为帮助保护您的安全,Internet Explorer 阻止此站点将文件下载到您的计算机。单击此处查看选项。”

在 ajax 调用之外更改 iframe 的 src 属性可以正常工作,并显示在打开或保存 PDF 之间进行选择的对话框。

有什么办法可以避免显示信息栏? 提前致谢。

【问题讨论】:

  • 除了 iframe 之外,还有什么方法可以使用吗?你真的应该避免它们。发布您的 html。
  • 想不出任何其他方式,我试图调用的返回 pdf 的“src”位于另一台服务器中。

标签: jquery ajax iframe


【解决方案1】:

如果你不想使用 jQuery,你可以试试这个

document.getElementById("myframe").src=src;

用 jQuery 试试这个

var iframe = $('#myframe');

 $(iframe).attr('src', src)

要打开 PDF 试试这个

window.open(src);

将在新窗口中打开pdf...但无法避免信息栏...

【讨论】:

  • 在完成时打开一个新窗口会使IE7打开它然后关闭它。
【解决方案2】:

避免 iframe 和信息栏的另一种方法是不自动打开 PDF。在调用 AJAX 回调中,创建一个指向 PDF 文件的常规链接,以便用户可以直接单击它。这应该可以防止 IE 标记下载。

【讨论】:

  • 谢谢。我在 AJAX 回调中动态更改了链接的 href,并使链接看起来像一个“打印”按钮(通过 jQuery UI)。
  • @mentxugle 您能否详细说明一下您是如何使用示例代码实现这一目标的……?
【解决方案3】:

我不确定它是否会起作用,但你可以试试这个:

var alterIframe = function(src){
   $('#myframe').attr("src",src);
};

$.ajax(
        {
            url: "someUrl.aspx/getInfo",
            dataType: "json",
            data: "{'data':{'data1':'data1'}}",
            type: "post",
            contentType: "application/json; charset=utf-8",
            complete: function(data, stat) {
                if (stat == "success" ) {
                    data = $.parseJSON(data);
                    setTimeout('alterIframe("' + data.src + '")',300);
                }
            }
        }
);

希望对你有帮助;)

【讨论】:

  • 谢谢,但仍然出现相同的行为:IE7 显示信息栏。
猜你喜欢
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多