jQuery POST不发送JSON数据

时间:2011-09-19 04:47:58

标签: wcf rest jquery post

我正在尝试使用jQuery AJAX对在localhost上运行的服务执行POST,但即使在我设置jQuery.support.cors = true之后,它也会一直返回状态码0。我还可以从浏览器成功导航到我的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>

有谁知道造成这种情况的原因是什么?我还要提一下,我不能使用jQuery在localhost上发布任何内容。

根据Fiddler的说法,JSON数据没有发送,HTTP OPTIONS完成而不是POST。

5 个答案:

答案 0 :(得分:5)

试试这个

var dataObj = {test:"test"};

var json = JSON.stringify(dataObj);

然后在你的ajax电话中

data: json,

答案 1 :(得分:2)

我不想再花时间在这个问题上,所以我使用原始的HTML表单POST,因为在我的情况下使用JSON并不重要。

对于原始帖子中列出相同问题的其他人,请参阅此主题以获取解释和解决方案:Problem sending JSON data from JQuery to WCF REST method

总而言之,如果需要响应跨域调用,您的服务需要能够处理HTTP OPTIONS方法。

答案 2 :(得分:2)

您应该使用网络监视器等工具来查看浏览器是否要求服务器提供允许的标头(使用OPTIONS标头请求),您可能需要在实际请求之前在OPTIONS响应中提供正确的标头被发送到服务器(参见底部的文章)。

另外,您可以尝试将其添加到实际调用或ajaxSetup中,因为您需要告诉浏览器发送凭据并允许跨域调用(我知道其他人已经提到'crossDomain'):

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

如果你也有时间,请阅读此内容。https://developer.mozilla.org/en/http_access_control

答案 3 :(得分:0)

因此,当请求是跨域时,jQuery会将您的发布请求作为get请求发送。 您是否在URL中访问“localhost”,但是您的应用程序正在将请求发送到您的计算机的本地IP而不是localhost?因为这在技术上是跨域的,这意味着您不会以预期的方式接收请求。

E.g。 (刚在本地测试过) 访问我的本地站点:

http://localhost/test/

网站上的表单通过$ .post()提交到我的本地IP地址而不是localhost

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

这是跨域请求

如果您正在调用$ .post()或jquery的ajax()调用设置为post,它会自动将您的参数从帖子正文移动到查询字符串中。

如果您正在访问本地主机,请尝试通过您的jquery post()方法用作域的任何地址访问该站点,并查看是否有帮助。

详细了解跨域政策: http://en.wikipedia.org/wiki/Same_origin_policy

答案 4 :(得分:-2)

将数据作为Object文字而不是字符串

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

data: {test:"test"},