这是我在Stackoverflow上的第一篇文章。希望你们能帮助我解决我的问题。我有一个 HTML 页面 domain1.sharepoint.com 我正在尝试使用 JQuery+SPServices 从 SharePoint on domain2.sharepoint.com 获取总列表项。
我知道由于同源策略,我需要使用 XMLHttpRequest (CORS) 来获取我需要的数据。不幸的是,我不确定如何将XMLHttpRequest放入SPServices中。我已经尝试过,并得到"未定义"错误。我对 JavaScript 很陌生,感谢所有的帮助。
这是我到目前为止所做的:
$.support.cors = true;
function createCORSRequest(method, refURL) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
xhr.open(method, refURL, true);
} else if (typeof XDomainRequest != "undefined") {
xhr = new XDomainRequest();
xhr.open(method, refURL);
} else {
xhr = null;
}
return xhr;
}
function makeCorsRequest() {
var refURL = 'http://domain1.sharepoint.com';
var spURL = refURL;
var xhr = createCORSRequest('GET', spURL);
if (!xhr) {
alert('CORS not supported');
return;
}
xhr.onload = function() {
$().SPServices({
operation: "GetListItems",
webURL: spURL,
listName: "Message Log",
viewName: "{70DFBF9A-5266-4D69-AD01-E848301B51BB}",
async: false,
CAMLViewFields: "<ViewFields><FieldRef Name='Status' /></ViewFields>",
completefunc: function (xData, status) {
$("#countlist").html($(xData.responseXML).find("z\:row").length);
}
});
};
xhr.onerror = function(e, jqxhr) {
alert('Woops, there was an error making the request. ' + jqxhr);
};
xhr.send();
}
onload = makeCorsRequest;
我认为你做得太多了。 这一行:
$.support.cors = true;
应该是您启用跨域唯一需要的东西。 这告诉jQuery启用cors,它会处理其余的工作。
设置完成后,可以正常方式调用 SPServices,并确保您将"webURL"选项设置为指向域 2。
请注意,虽然这在"现代"浏览器中有效,但 IE(我认为)会提示用户授予权限。