我公开了一个WCF RESTful服务,我正在尝试使用客户端通过使用jQuery ajax调用来调用这些WCF RESTful服务。代码似乎在IE 9中正常工作但在Safari 5.0.3中出错
这是以下代码:
<script type="text/javascript">
$(document).ready(function () {
$('#butCallAjax').click(function () {
jQuery.support.cors = true;
$.ajax(
{
type: 'POST',
url: 'http://<server_name>/Service.svc/login',
data: '{"Domain":"mydomain","UserName":"myusername","Password":"mypassword"}',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data) {
alert('success');
$.each(data, function (i, theItem) {
try {
//alert('success add combo');
// Other browsers
}
catch (error) {
alert('error found');
// combo.add(option); // really old browser
}
});
},
error: function (msg, url, line) {
alert('error trapped in error: function(msg, url, line)');
alert('msg = ' + msg + ', url = ' + url + ', line = ' + line);
}
});
//alert('button click');
});
});
</script>
任何人都可以帮我吗?谢谢!从Safari调用错误函数,我可以看到两个警告弹出窗口。
答案 0 :(得分:0)
如果您的WCF位于远程服务器上并且正在从另一台服务器进行调用,则出于安全考虑,无法在远程服务器上进行Ajax调用。看看同源政策:
http://en.wikipedia.org/wiki/Same_origin_policy
要进行远程调用,请使用Jquery.getJSON()函数来使用JSONP。请查看此链接了解详细信息:
答案 1 :(得分:0)
好的,终于得到了解决方案;经过近一个星期的大量试验和错误之后!
在global.asax文件中添加了这个,safari似乎能够访问POST方法!
String corsOrigin, corsMethod, corsHeaders;
corsOrigin = HttpContext.Current.Request.Headers["Origin"];
corsMethod = HttpContext.Current.Request.Headers["Access-Control-Request-Method"];
corsHeaders = HttpContext.Current.Request.Headers["Access-Control-Request-Headers"];
if (corsOrigin == null || corsOrigin == "null")
{
corsOrigin = "*";
}
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", corsOrigin);
if (corsMethod != null)
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", corsMethod);
if (corsHeaders != null)
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", corsHeaders);
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
return;
}