【问题标题】:jQuery Ajax post to WCF getting bad requestjQuery Ajax 发布到 WCF 收到错误请求
【发布时间】:2011-12-28 22:04:56
【问题描述】:

我正在尝试创建一个自动完成框...并且我可以使用 Fiddler 检索适当的 JSON,但是在代码中实现时,我收到连接错误。 代码:

<htm>
<Head>
</head>
<body>
<input type="text" id="txt_search" name="search">
<span id="suggest"></span>      
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {

    $("#txt_search").keyup(function() 
    {

        var search; 
        search = $("#txt_search").val(); 

        if (search.length > 2) 
            { 

                // Trigger AJAX request 

                $.ajax( 
                { 
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    url: "*****",
                    data: { "FirstPartOfName":"Med " },
                    dataType: "json",
                    success: function(message)  { 
                        if (message.length > 0) 
                            { 
                            alert('It got data back....');
                            message = "Do you mean: " + message; 
                            $("#suggest").append(message);
                            }
                        else
                            {
                            alert('Nothing came back....');
                            }
                        }
                }       );
            } 
            else { 
                // Empty suggestion list 
                $("#suggest").empty();
                } 
    });

});
</script>
</body>
</html>

我无法提供 URL,但我可以使用 Fiddler 进行连接以对其进行测试。我认为这可能是 WCF 的问题,但是我怎样才能用 Fiddler 正确测试呢?

【问题讨论】:

    标签: jquery ajax wcf rest post


    【解决方案1】:

    我不知道这是否是您的主要问题,但是通过将 contentType 设置为 application/json,您告诉 WCF 您正在以 JSON 序列化格式发送参数,但是当您传递像这样的 jQuery 的原生对象,它将对这些参数进行 URL 编码。换句话说,您发送的是?FirstPartOfName=Med,而不是{"FirstPartOfName":"Med"}。更多相关信息:http://encosia.com/asmx-scriptservice-mistake-invalid-json-primitive/

    在这种简单的情况下,您可以通过显式发送 JSON 字符串来解决此问题:

    data: '{"FirstPartOfName":"Med"}'
    

    它看起来很相似,但完全不同。

    在最简单的情况下,手动构建 JSON 字符串是可行的,但会变得很麻烦。你也可以use JSON.stringify to automatically build the string from objects代替。

    【讨论】:

    • 感谢您的帖子。我确实犯了这个错误,但是问题仍然存在。我仍然收到错误的请求 400 错误。
    • @user1120064:你能展示一些你的 WCF 代码/配置吗?你启用了 HttpPost 吗?该方法是否使用允许 POST 请求的 WebInvoke 属性进行修饰?
    • 这实际上是由一个不再可用的人编写的,我只是假设它是正确完成的。我会询问我的管理员是否可以访问它。
    • 如果我可以在 Fiddler 中获得适当的响应,我的 WCF 代码可以减少那么多吗?
    • @user1120064:您是否在 Fiddler 中制作相同的请求?例如,如果您在 Fiddler 中测试 GET,这并不一定意味着您的 jQuery POST 将以相同的方式工作。 Content-Type 同上,它不默认为 application/json
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多