#c# #jquery #xmlhttprequest #autodesk-forge
Вопрос:
У меня возникла проблема с загрузкой 3D — модели на онлайн-сервер, показанная ошибка связана с доступом к API Forge, локально работает гладко, однако при установке на сервере или на веб-сайте отмечается следующая ошибка «Не удалось загрузить ресурс: сервер ответил со статусом 404 (не найден)», затем «onDocumentLoadFailure () — Код ошибки:7». Как я уже говорил, что я нахожу странным, так это то, что локально это работает. Прикрепил сегмент кода, в котором отображается ошибка.
function getAccessToken() {
var xmlHttp = null;
xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", '/api/forge/toke', false); //Address not found
xmlHttp.send(null);
return xmlHttp.responseText;
}
Заранее большое вам спасибо.
Ответ №1:
Вы уверены, что код, который вы запускаете локально, и код, который вы развернули, действительно совпадают?
Эта getAccessToken
функция кажется неправильной по нескольким причинам:
- Во — первых, кажется, в URL-адресе есть опечатка-не должно ли это быть
/api/forge/token
вместо/api/forge/toke
? - Что еще более важно, HTTP-запрос является асинхронным, что означает, что он не может вернуть ответ сразу после вызова
xmlHttp.send()
. Вы можете найти более подробную информацию об использованииXMLHttpRequest
в https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest. - И, наконец, предполагая, что функция передается в
Autodesk.Viewing.Initializer
параметры, она должна возвращать токен, используя переданный ей параметр обратного вызова (как показано на https://forge.autodesk.com/en/docs/viewer/v7/developers_guide/viewer_basics/initialization/#example).
С учетом этого ваш getAccessToken
, вероятно, должен выглядеть примерно так (используя более современный fetch
и асинхронный/ожидающий):
async function getAccessToken(callback) {
const resp = await fetch('/api/forge/token');
const json = await resp.json();
callback(json.access_token, json.expires_in);
}
Комментарии:
1. Здравствуйте, большое вам спасибо, что нашли время ответить на мой вопрос. Я уже нашел проблему. Когда я выполняю развертывание, я должен изменить URL-адрес, по которому делается запрос для общественности, или имя домена. Например: mywebsite.com/api/forge/token . В вопросе я допустил ошибку, когда писал, вот почему там написано «токен» вместо «токен».
Ответ №2:
Я уже нашел проблему. Когда я выполняю развертывание, я должен изменить URL-адрес, по которому делается запрос для общественности, или имя домена. Например: mywebsite.com/aplication-name/api/forge/token.