Safari中的jQuery Ajax调用错误

时间:2012-02-24 07:29:42

标签: jquery ajax wcf safari

我公开了一个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调用错误函数,我可以看到两个警告弹出窗口。

2 个答案:

答案 0 :(得分:0)

如果您的WCF位于远程服务器上并且正在从另一台服务器进行调用,则出于安全考虑,无法在远程服务器上进行Ajax调用。看看同源政策:

http://en.wikipedia.org/wiki/Same_origin_policy

要进行远程调用,请使用Jquery.getJSON()函数来使用JSONP。请查看此链接了解详细信息:

http://api.jquery.com/jQuery.getJSON/

答案 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;
}