我正在尝试创建一个自动完成的框...我可以使用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>
我无法提供网址,但我可以使用Fiddler进行测试。我认为这可能是WCF的一个问题,但我怎么能用Fiddler正确测试呢?
答案 0 :(得分:0)
我不知道这是否是您的主要问题,但是通过将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代替。