POST httpRequest/AJAX для внешнего API в Sharepoint Online
декорации
Я пытаюсь позвонить в службу в IBM Cloud и отправил файл. Этот запрос должен быть выполнен в Sharepoint Online с использованием JavaScript. В запросе файл будет отправлен.проблема
У меня проблема с кросс-доменом (сторона Sharepoint) и неправильным запросом (сторона IBM) в Sharepoint Online. Я пробовал серевал способами.
попытки
Чтобы решить кросс-доменную проблему:
$.ajax({
url: "../_api/SP.WebProxy.invoke",
type: "POST",
data: JSON.stringify(
{
"requestInfo": {
"__metadata": { "type": "SP.WebRequestInfo" },
"Url": "https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify?api_key={API-KEY}&version=2016-05-20",
"Method": "POST",
"Headers": {
"results": [{
"__metadata": { "type": "SP.KeyValue" },
"Key": "Accept",
"Value": "application/json;odata=verbose",
"ValueType": "Edm.String"
}, {
"__metadata": { "type": "SP.KeyValue" },
"Key": "Content-Type",
"Value": "application/json",
"ValueType": "Edm.String"
}]
}
,
"Body": JSON.stringify({ "files":[ { "name":"imagem.png","content": image } ]})//Problem here
}
}),
headers: {
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: function (data) {
alert("Sucesso");
console.log(data.d.Invoke.StatusCode);
console.log(JSON.stringify(data.d.Invoke.Body));
},
error: function (data) {
alert("Falha");
console.log(arguments[2]);
}
});
Таким образом, проблема междоменного домена (Sharepoint) решена, но я получаю неверный запрос (IBM API). Файл отправки запроса восстановления показан ниже.
"Body": JSON.stringify({ "files":[ { "name":"imagem.png","content": image } ]})
Чтобы решить проблему с ошибочным запросом:
function CORS() {
var data = new FormData();
data.append("imagemTeste", $("#imagem")[0].files[0]);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify?api_key={API-KEY}&version=2016-05-20');
xhr.onload = function (e) {
var data = JSON.parse(this.response);
console.log(data);
}
xhr.send(data);
}
Здесь проблема Bad request решена (IBM API), но я получаю междоменную ошибку (Sharepoint).
У меня нет идей, чтобы решить это.
1 ответ
Одним из вариантов является вызов API с сервера. Например, вы можете использовать облачные функции для вызова этого API. Любая другая серверная среда должна работать. Надеюсь это поможет.