【问题标题】:XMLHttpRequest error for the Viewer查看器的 XMLHttpRequest 错误
【发布时间】:2017-02-10 22:21:48
【问题描述】:

我使用以下 HTML 文件来测试 Autodesk Forge 的 Headless Viewer。测试网址如下所示: http://localhost:8080/HeadlessViewer.html?token={{Bearer}}&urn={{base64URN}}

token 有 scope=data:read,urn 是 base64 格式。

<html>
<head>
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=no" />
</head>
<body>
    <div id="MyViewerDiv"></div>

    <!-- The Viewer JS -->
    <script src="https://developer.api.autodesk.com/viewingservice/v1/viewers/three.min.js?v=v2.10.*"></script>
    <script src="https://developer.api.autodesk.com/viewingservice/v1/viewers/viewer3D.js?v=v2.10.*"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

    <!-- Developer JS -->
    <script>
        function getParameterByName(name, url) {
            if (!url) url = window.location.href;
            name = name.replace(/[\[\]]/g, "\\$&");
            var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
                results = regex.exec(url);
            if (!results) return null;
            if (!results[2]) return '';
            return decodeURIComponent(results[2].replace(/\+/g, " "));
        }

        function initViewer(token, urn) {
            var viewerApp;
            var options = {
                env: 'AutodeskProduction',
                accessToken: token
            };

            var documentId = atob(urn); // 'urn:<YOUR_URN_ID>';
            Autodesk.Viewing.Initializer(options, onInitialized);

            function onInitialized() {
                viewerApp = new Autodesk.Viewing.ViewingApplication('MyViewerDiv');
                viewerApp.registerViewer(viewerApp.k3D, Autodesk.Viewing.Viewer3D);
                viewerApp.loadDocument(documentId, onDocumentLoaded);
            }

            function onDocumentLoaded(lmvDoc) {
                var modelNodes = viewerApp.bubble.search(av.BubbleNode.MODEL_NODE); // 3D designs
                var sheetNodes = viewerApp.bubble.search(av.BubbleNode.SHEET_NODE); // 2D designs
                var allNodes = modelNodes.concat(sheetNodes);
                if (allNodes.length) {
                    viewerApp.selectItem(allNodes[0].data);
                    if (allNodes.length === 1) {
                        alert('This tutorial works best with documents with more than one viewable!');
                    }
                } else {
                    alert('There are no viewables for the provided URN!');
                }
            }
        }

        $(document).ready(function () {
            var url = window.location.href,
                token = getParameterByName('token', url),
                urn = getParameterByName('urn', url);
            initViewer(token, urn);
        });
    </script>
</body>
</html>

但是,它在异常 XMLHttpRequest.responseText 处停止。请看附图:Error image

【问题讨论】:

  • 您可以在隐身/私人浏览器窗口中重试吗?那应该避免本地缓存。另外,除非你有理由,否则考虑使用 viewer3D.min.js(更小)
  • 我使用隐身模式并且有同样的错误。我打算使用 viewer3D.js 来调试 Viewer 代码,看看这个 XMLHttpRequest 错误会发生什么。

标签: autodesk-forge autodesk-viewer


【解决方案1】:

我尝试了您的代码,只是替换了“accessToken:”和“var documentId = ”并且工作正常。查看您的代码,我认为问题可能出在以下行:

var documentId = atob(urn); // 'urn:<YOUR_URN_ID>';

atob 函数将对字符串进行解码,这意味着它不会在 Base64 上。但是 documentId 应该是这样的:

var documentId = 'urn:c29tZSByYW5kb20gd29yZHMgaGVyZQ==';

请确保 documentId 格式正确。

最后,请注意Viewer requires URL Safe encoding。考虑在服务器上编码(传输更安全)或在客户端进行编码,see this answer

【讨论】:

  • var documentId = 'urn:' + urn;我不应该解码字符串,而是保留 Base64。这就是 XMLHttpRequest 无法获取响应内容的原因。谢谢。
猜你喜欢
  • 2013-05-24
  • 2018-07-04
  • 2018-10-22
  • 2021-03-06
  • 1970-01-01
  • 2017-09-16
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多