以下是我试图通过Ajax调用进行的跨域调用。我们使用的Web服务仅返回XML,因此我不能使用jsonp
作为dataType
。正如我在它下面写的,我收到以下错误在Chrome的调试器:在Ajax调用中实现响应标头
Uncaught ReferenceError: Request is not defined
下面是代码:
function GetProgramDetails() {
var URL = "http://quahildy01/xRMDRMA02/xrmservices/2011/OrganizationData.svc/AccountSet?$select=AccountId,Name,neu_UniqueId&$filter=startswith(Name,\'" + $('.searchbox').val() + "\')";
var sourceDomain = Request.Headers["Origin"];
var request = $.ajax({
type: 'POST',
beforeSend: function(request){
request.setRequestHeader("Access-Control-Allow-Origin", sourceDomain)
},
url: URL,
contentType: "application/x-www-form-urlencoded",
crossDomain: true,
dataType: XMLHttpRequest,
success: function (data) {
console.log(data);
alert(data);
},
error: function (data) {
console.log(data);
alert("Unable to process your resquest at this time.");
}
});
}
编辑
我试过以下版本这段代码并没有在错误信息中看到任何不同的内容。这是在企业环境中使用的,所以有可能由于服务器上的安全功能,这是不可能的?我对Ajax是全新的,所以我不知道这是否可以在100%的时间内运行,或者只是在大部分设置中运行。
beforeSend: function (request) {
request.setRequestHeader("Access-Control-Allow-Origin: *")
},
beforeSend: function (request) {
request.setRequestHeader("Access-Control-Allow-Origin: ", "http://localhost:55152")
},
beforeSend: function (request) {
request.setRequestHeader("Access-Control-Allow-Origin", "http://localhost:55152")
},
beforeSend: function (request) {
var sourceDomain = request.Headers["http://localhost:55152"];
request.setRequestHeader("Access-Control-Allow-Origin: ", sourceDomain)
},
beforeSend: function (request) {
var sourceDomain = location.protocol + '//' + location.host;
request.setRequestHeader("Access-Control-Allow-Origin: ", sourceDomain)
},
当我执行这个时,我得到的错误:未捕获的TypeError:无法读取属性未定义的'Origin' – NealR 2013-03-21 15:40:09
对不起,意思是说,无论我改变'[“Origin”]'(在我的情况下'http:// localhost:55152')我得到'Uncaught TypeError' – NealR 2013-03-21 15:52:06
你为什么要设置sourceDomain那样?为什么不从URL中获取? jqXHR没有“Headers”属性/方法。 – 2013-03-21 15:56:13