Ошибка вызова jQuery Ajax в Safari - PullRequest
1 голос
/ 24 февраля 2012

Мне доступна служба WCF RESTful, и я пытаюсь использовать клиент для вызова этих служб WCF RESTful с помощью вызова jQuery ajax. Код, кажется, работает нормально в 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 голосов
/ 29 февраля 2012

Хорошо, наконец-то есть решение для этого; после долгих проб и ошибок почти неделю!

Добавил это в файл 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;
} 
0 голосов
/ 24 февраля 2012

Если ваш WCF находится на удаленном сервере, и вызов выполняется с другого сервера, то вызов Ajax не может быть сделан на удаленных серверах из-за проблем безопасности.Взгляните на ту же политику происхождения:

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

Чтобы сделать удаленный вызов, используйте JSONP с помощью функции Jquery.getJSON ().Проверьте эту ссылку для деталей:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...