我遇到了这个问题。我使用JQuery1.6.2将AJAX方法用于一个运行在单独子域上的非常简化的HTTP服务器。如果我只是发布一个普通的HTML表单,我会得到正确的输出,但当然我想用Javascript做得更好。
所以我使用AJAX方法设置如下:
$('.send_sample').click(function () {
var request = $.ajax({
url : "http://removedurl:8080/SAMPLES",
type : 'POST',
dataType : 'text',
crossDomain : true,
cache : false,
accepts : 'text/plain',
data : {username : '<?php echo $_SESSION['username'] ?>', first_name : '<?php echo $_SESSION['first_name']; ?>', last_name : '<?php echo $_SESSION['last_name']; ?>', company : '<?php echo $_SESSION['company']; ?>', sequence_id : '', filename : '', sample_id : '', quantity : '', output_file : '', delivery : '', email_copy : ''},
success : function (return_value) {
console.log(return_value);
},
error : function (error_info) {
console.log(error_info);
},
complete : function (complete_jqXHR, textStatus) {
console.log(textStatus);
}
});
console.log(request);
});
请注意,url被删除了,但其他一切都是一样的,包括端口8080(相信我,服务器接受8080上的HTTP请求。
因此,当我打开fiddler并运行此页面时,请求会在fiddler中发出并返回。我甚至看到了正确的输出,就是单词TRUE。你甚至可以在这里看到完整的原始响应:
HTTP/1.1 200 200 OK
Connection: close
Content-Length: 8
Server: Indy/9.0.18
TRUE
正如我之前所说,这个软件使用的HTTP服务器非常简单。但是JQuery在返回时直接转到Error,没有其他描述。如果我在Chrome中调试,我还会收到一条小消息,上面写着:
XMLHttpRequest无法加载http://removedUrl:8080/SAMPLES.起源http://192.168.2.140访问控制允许来源不允许。
有人知道是什么原因造成的吗。
此外,我还在JQuery的ajax方法中增量添加了字段:dataType、crossDomain、cache、accepts。。。只是想看看它是否会有所不同。
谢谢!
您必须使用jsonp来进行跨站点请求
设置crossDomain:true将没有帮助,因为浏览器会阻止来自外部域的回复
这是一个众所周知的javascript限制,但是,正如我所说,您可以使用jsonp来消除它。你可以在谷歌上搜索,你会发现很多资源
请注意,您需要修改服务器"http://removedurl:8080/SAMPLES"以便获得jsonp响应。
如果您无法访问服务器,您将不得不依赖服务器端代理(PHP/ASP.Net等)