2011-12-28 101 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