这是我的代码
function getListItem(url, listname, id, complete, failure) {
// Getting our list items
$.ajax({
url: url + "/_api/lists/getbytitle('"+ listname +"')/items",
method: "GET",
headers: { "Accept": "application/json; odata=verbose" },
success: function (data) {
// Returning the results
complete(data);
},
error: function (data) {
failure(data);
}
});
};
url
正确显示,同样在url
调用中检查完整的ajax
参数时,当我在新标签中打开时,它会返回数据
但是,由于此ajax
调用是在位于其他域中的sharepoint应用内进行的,因此会抛出错误 - No 'Access-Control-Allow-Origin' header is present on the requested resource
我应该在我的网站上进行哪些更改,以使该列表可用于跨域调用。
的信息:
网站网址为http://www.vignesh.cloudappsportal.com/
应用网址为xxxx.apps.cloudappsportal.net/CloudAppsTrial/Pages/Default.aspx
答案 0 :(得分:1)
出于安全考虑,现代网络浏览器会阻止跨域调用。这是基于Web的开发中的常见问题,并且由于SharePoint托管应用程序的性质而特别相关。例如,当从App(托管在http://consoto.sharepoint.com
)访问父Web(http://apps.sharePoint.com/SPApp
)中的数据时,将阻止呼叫。为了解决这个问题,您可以使用SP.RequestExecutor.js
脚本将消息从同一域中继到SharePoint。
示例强>
function getListItems(hostUrl,appWebUrl, listTitle,success,error)
{
var url = appWebUrl + "/_api/SP.AppContextSite(@target)/web/lists/getbytitle('" + listTitle + "')/items?@target='" + hostUrl + "'";
var executor = new SP.RequestExecutor(appWebUrl);
executor.executeAsync(
{
url: url,
method: "GET",
headers: { "Accept": "application/json; odata=verbose" },
success: function (data) {
var data = JSON.parse(data.body);
success(data.d.results);
},
error: error
});
}
用法
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
var appWebUrl = getParameterByName('SPAppWebUrl');
var hostUrl = getParameterByName('SPHostUrl');
var scriptbase = hostUrl + '/_layouts/15/';
$.getScript(scriptbase + "SP.RequestExecutor.js", function (data) {
getListItems(hostUrl,appWebUrl, 'Tasks',function(data){
//print list items properties
data.forEach(function(item){
console.log(item.Title);
});
},
function(error){
//error handling goes here...
});
});
关于应用权限
SharePoint应用使用权限请求来指定正常运行所需的权限。权限请求指定应用程序所需的权限以及它需要权限的范围。这些权限是应用程序清单的一部分。下图演示了如何为App授予读取权限
关注App permissions in SharePoint 2013了解更多详情。