2011-12-28 85 views
0

我正在尝试创建一个自动完成框......我可以使用Fiddler检索适当的JSON,但是当在代码中实现时,出现连接错误。 代码:jQuery Ajax发布到WCF变坏请求

<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> 

我不能提供网址,但我可以使用招,以测试其连接。我认为这可能是WCF的一个问题,但是我怎么才能使用Fiddler正确测试?

回答

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

+0

感谢您的帖子。我的确在犯这个错误,但问题仍然存在。我仍然收到一个错误的请求400错误。 – mdance 2011-12-28 22:25:55

+0

@ user1120064:你可以显示一些你的WCF代码/配置吗?你有HttpPost吗?该方法是否使用允许POST请求的WebInvoke属性进行装饰? – 2011-12-28 22:29:35

+0

这实际上是由一个不再可用的个人编写的,我刚才认为它是正确的。我会问我的管理员是否可以访问它。 – mdance 2011-12-28 23:26:20