跨域时,JQuery ajax JSONP POST更改为GET

时间:2012-05-09 17:27:37

标签: wcf jquery jsonp

我有一个期待POST的WCF服务。使用Fiddler我发现在跨域情况下,我的POST请求被更改为GET,导致服务器出现错误405.

$.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--");
    }
});

任何人都可以对此有所了解吗?

由于

2 个答案:

答案 0 :(得分:10)

没有POST和JSONP。 JSONP的工作原理是在DOM中创建一个新的脚本标记,用于向服务器发送GET请求。你给了jQuery.ajax两个不兼容的参数(POST,jsonp),而jQuery正在选择一个而不是另一个。

一次更新:您可以使用CORS(跨源资源共享)之类的东西来启用跨域服务的非GET请求。 WCF不支持它开箱即用,但我写了一篇关于在http://blogs.msdn.com/b/carlosfigueira/archive/2012/05/15/implementing-cors-support-in-wcf.aspx的WCF中实现它的帖子。

答案 1 :(得分:0)

它正在将其转换为GET,因为在执行JSON.stringify之后您不再拥有名称/值对;你有一个字符串。 POST需要名称/值对。