来自响应的数据是无法设置为 iframe 的符号

Posted

技术标签:

【中文标题】来自响应的数据是无法设置为 iframe 的符号【英文标题】:Data from response is symbols unable to set to iframe 【发布时间】:2018-08-11 02:37:22 【问题描述】:

我想检查 Api 的响应是否成功,然后将其放入 iframe。

如果我像这样调用它两次......它可以工作。

function getPDF(fileDirectorGuid) 
if ($('#viewDownloadWindow').is(":visible")) 
    $.ajax(
        url: $('#fdApiURL').val() + 'getDocAsPDF' + FIRST_ARGS + '&guid=' + fileDirectorGuid + '&fallbackToNative=true',
        type: 'GET',
        success: function (data) 
            if (data == null) 
                alert("failed");
            
            else 
                $('#pdfFrame').attr('src', $('#fdApiURL').val() + 'getDocAsPDF' + FIRST_ARGS + '&guid=' + fileDirectorGuid + '&fallbackToNative=true');
            
        ,
        error: function (jqXHR, textStatus, errorThrown) 
            alert("Failed");
        
    );

但是我不想调用这个两次,这并没有像我想象的那样工作

function getPDF(fileDirectorGuid) 
if ($('#viewDownloadWindow').is(":visible")) 
    $.ajax(
        url: $('#fdApiURL').val() + 'getDocAsPDF' + FIRST_ARGS + '&guid=' + fileDirectorGuid + '&fallbackToNative=true',
        type: 'GET',
        success: function (data) 
            if (data == null) 
                alert("failed");
            
            else 
                $('#pdfFrame').attr('src', data);
            
        ,
        error: function (jqXHR, textStatus, errorThrown) 
            alert("Failed");
        
    );

在调试器中查看时数据看起来像这样

"%PDF-1.6
1 0 obj
<<
/Length 2 0 R
/Filter  /FlateDecode
>>
stream
x��[�%Iv�wO�����H�|��8&`%ِږ8�.���D�J�h  ��^of�Z�;wsj�g�<�4��O�X�Nq���c��������l����������7��?����>���S������4��>�y||��z�<J����Gݏ�c�?C����6�����?

以此类推。

【问题讨论】:

【参考方案1】:

iframe 的 src 属性是一个 url,您正在设置实际的 pdf 数据。您可以使用 blob url 来实现您的目标

$.ajax(
    url: $('#fdApiURL').val() + 'getDocAsPDF' + FIRST_ARGS + '&guid=' + fileDirectorGuid + '&fallbackToNative=true',
    type: 'GET',
    xhr:function()
        var xhr = new XMLHttpRequest();
        xhr.responseType= 'blob'
        return xhr;
    ,        
    success: function (data) 
        if (data == null) 
            alert("failed");
        
        else 
            var url = window.URL.createObjectURL(data);
            $('#pdfFrame').attr('src', url);
        
    ,
    error: function (jqXHR, textStatus, errorThrown) 
        alert("Failed");
    
);

【讨论】:

太好了,我知道我错过了一些相当简单的东西,这很有效。

以上是关于来自响应的数据是无法设置为 iframe 的符号的主要内容,如果未能解决你的问题,请参考以下文章

摆脱 iframe 正文默认边距

如何将 iframe 高度和宽度设置为 100%

“由于语音响应为空,无法将 Dialogflow 响应解析为 AppResponse”,使用烧瓶助手

去掉iframe默认滚动条后影响正常滚动以及js解决高度自适应。

响应式 Iframe 高度跨域,无需控制源页面

反向代理模式 Apache 拦截或捕获来自后端服务器的 302 响应并在内部重定向而不将 302 响应发送回客户端