2012-05-09 2 views
5

У меня есть служба WCF, ожидающая POST. Используя Fiddler, я обнаружил, что в междоменных ситуациях мой запрос POST менялся на GET, что приводит к ошибке 405 с сервера.JQuery ajax JSONP POST изменен на GET, когда перекрестный домен

$.ajax({ 
    type: "POST", 
    url: "http://blah/blah.svc/Test", 
    data: JSON.stringify("{ 'WebUserID': 4 }"), 
    dataType: "jsonp", // from server 
    contentType: "application/json; charset=utf-8", // to server 
    success: function (data, status, xhr) { 
     alert("success--"); 
    } 
}); 

Может ли кто-нибудь пролить свет на это?

Благодаря

+1

Это не дубликат, но ответ отвечает на этот вопрос: http://stackoverflow.com/questions/2699277/post-data-to-jsonp – lonesomeday

ответ

0

Это преобразование его в GET, потому что больше нет пары имя/значение после выполнения JSON.stringify; у вас просто строка. POST требует пару имя/значение.

+0

Не 'JSON.stringify' свои данные, если только вы 're означает передать последовательное представление объекта. –

+0

Он не должен стягиваться, но не из-за того, что вы упомянули. Параметр 'stringify' уже« stringified », это не объект JS (это строка). Stringifying будет дважды закодировать его, что не удастся. – carlosfigueira

+0

И чтобы отправить данные в запрос POST, ему действительно нужно передать сериализованную версию объекта (в теле запроса). – carlosfigueira

10

Нет POST и JSONP. JSONP работает, создавая новый тег сценария в DOM, который отправляет на сервер запрос GET. Вы даете jQuery.ajax два несовместимых параметра (POST, jsonp), а jQuery выбирает один из них.

Одно обновление: вы можете использовать что-то вроде CORS (совместное использование ресурсов Cross-Origin), чтобы включить запросы, не связанные с GET, в междоменные службы. WCF не поддерживает его из коробки, но я написал сообщение о его реализации в WCF по адресу http://blogs.msdn.com/b/carlosfigueira/archive/2012/05/15/implementing-cors-support-in-wcf.aspx.

+0

Downvoter, позаботьтесь о том, почему? – carlosfigueira

Смежные вопросы