JQuery POST не отправляет данные JSON - PullRequest
2 голосов
/ 19 сентября 2011

Я пытаюсь выполнить POST для службы, работающей на локальном хосте с jQuery AJAX, но он продолжает возвращать код состояния 0 даже после того, как я установил jQuery.support.cors = true.Я также могу успешно перейти к моей службе WCF REST из моего браузера.Вот как выглядит мой JavaScript:

    <script>
        jQuery.support.cors = true;
        $(document).ready(function(){
            $.ajax({
                type: "POST",
                url: "http://localhost:8000/Test",
                data: '{"test":"test"}',
                contentType: "application/json",
                dataType: "json",
                success: function (msg) {
                    alert('success');
                },
                error:function(x,e){
                    if(x.status==0){
                        alert('error 0');
                    }
                }
            });
        });
    </script>

Кто-нибудь знает, что может быть причиной этого?Я должен также упомянуть, что я не могу POST к чему-либо на localhost, используя jQuery.

Согласно Fiddler, данные JSON не отправляются, и вместо POST выполняются HTTP-ОПЦИИ.

Ответы [ 5 ]

5 голосов
/ 20 сентября 2011

попробуйте

var dataObj = {test:"test"};

var json = JSON.stringify(dataObj);

тогда в вашем ajax вызове

data: json,
2 голосов
/ 04 июля 2012

Вы должны использовать такой инструмент, как монитор сети и т. Д., Чтобы увидеть, запрашивает ли браузер у сервера допустимые заголовки (используя запрос заголовка OPTIONS), вам может потребоваться указать правильные заголовки в ответе OPTIONS перед фактическим запросом. отправляется на сервер (см. статью внизу).

Кроме того, вы можете попробовать добавить это к фактическому вызову или ajaxSetup, так как вам нужно будет указать браузеру отправку учетных данных и разрешить междоменный вызов (я знаю, что кто-то еще уже упомянул 'crossDomain'):

$.ajaxSetup({
  crossDomain: true,
  xhrFields: {
    withCredentials: true
  }
});

Прочтите это, если у вас есть время .. https://developer.mozilla.org/en/http_access_control

2 голосов
/ 20 сентября 2011

Я не хотел больше тратить время на эту проблему, поэтому я прибег к использованию необработанной HTML-формы POST, так как в моем случае использование JSON не было необходимым.

Для тех, у кого такая жепроблемы, изложенные в исходном посте, см. в этой теме объяснение и решение: Проблема отправки данных JSON из JQuery в метод REST WCF

Подводя итог, ваша служба должна уметь обрабатыватьметод HTTP OPTIONS, если ожидается, что он будет отвечать на междоменные вызовы.

0 голосов
/ 27 февраля 2014

Таким образом, когда запрос является междоменным, jQuery все равно отправит ваш почтовый запрос как запрос на получение.Получаете ли вы доступ к «localhost» в URL, но затем ваше приложение отправляет запросы на локальный IP-адрес вашего компьютера вместо localhost?Потому что это технически междоменный, что означает, что вы не получите запрос в ожидаемом порядке.

Например (только что проверил это локально) Посещение моего локального сайта по адресу:

http://localhost/test/

Форма на сайте отправляется на мой локальный IP-адрес вместо localhost через $ .post ():

<form action="http://10.0.0.17/test/" method="post">
   ....[form stuff...]
</form>

Это междоменный запрос

Если вы вызываете $ .post () или вызов jjery ajax () для post, то этоавтоматически перемещает ваши параметры из тела сообщения в строку запроса.

Если вы обращаетесь к локальному хосту, попробуйте перейти на сайт по любому адресу, который ваш метод jquery post () использует в качестве домена, и посмотрите, поможет ли это.

Подробнее о междоменных политиках: http://en.wikipedia.org/wiki/Same_origin_policy

0 голосов
/ 19 сентября 2011

Отправка данных в виде литерала объекта вместо строки

data: '{"test":"test"}',

в

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