我有一个JSON WCF服务,我写了一些javascript来访问这样的服务,
function stuffClick2() {
$.ajax({
url: "http://192.168.54.98/JsonWCFService/Service1.svc/Post",
type: "POST",
contentType: "application/json",
data: '{"x":"1","y":"2","message":"The answer is: "}',
dataType: "html",
success: function(data) { $('body').html(data); }
});
}
我写了一个HTML页面,上面有javascript。 HTML页面使用IIS提供。
当我在PC上使用chrome访问HTML页面时,我看到这些操作按此顺序发送到WCF JSON服务,
OPTIONS /JsonWCFService/Service1.svc/Post HTTP/1.1
POST /JsonWCFService/Service1.svc/Post HTTP/1.1
OPTIONS之前失败了,但我让OPTIONS调用返回此标题然后使其工作,
Access-Control-Allow-Origin: *
但我上面定义的回调不起作用,
success: function(data) { $('body').html(data); }
我知道WCF服务已经返回了这样的内容,
<b> The answer is 3 </b>
但是当调用回调时,data的值是一个空字符串。
当我在不同的浏览器(IE)中运行html页面时,它只会导致POST调用,而不是OPTIONS调用,那么它可以工作。我注意到IE警告我它存在安全隐患,并询问我是否要继续。
答案 0 :(得分:6)
当我尝试使用WCF为我正在制作的移动HTML应用程序实现CORS时,我遇到了这个问题。 OPTIONS是一个预检请求,用于在调用方法之前查看方法是否可用。
这将是你的问题:
我不确定您是否使用CORS,但主体将是相同的,因为它发送OPTIONS请求然后发送POST请求。
答案 1 :(得分:1)
谢谢你的回答确实让我走上了解决问题的道路。
当我使用其中的ajax javascript访问HTML页面时,我正在使用
http://localhost/file.html
但是如果你看一下javascript它正在使用
访问WCF服务http://192.168.54.98/JsonWCFService/Service1.svc/Post
如果我同时制作它们
http://mymachinename.domain.com/JsonWCFService/Service1.svc/Post
http://mymachinename.domain.com/file.html
然后无需调用OPTIONS操作即可正常工作。
这并不能解释为什么OPTIONS然后来自chrome的POST不起作用。 Chrome似乎忽略了结果。