2012-08-23 78 views
0

我目前使用Jquery和web服務來檢索自動完成文本框的值。在從Web服務返回值之後,我收到一條警告「解析器錯誤」警告。爲什麼是這樣?自動完成解析器

Jquery 

$(document).ready(function() { 

    $.ajax({ 
     type: "POST", 
     url: "/Service/WSDataService.asmx/GetStates", 
     dataType: "json", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     success: function(data) { 
      var datafromServer = data.d.split(":"); 
      $("[id$='txtautofromDB']").autocomplete({ 
       source: datafromServer 
      }); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      alert(textStatus); 
     } 
    }); 
} 


web service 
     [WebMethod] 
     public string GetStates() 
     { 
      StringBuilder sbStates = new StringBuilder(); 
      List<string> stringlist = new List<String>(); 
      stringlist.Add("alabama"); 
      stringlist.Add("boston"); 
      stringlist.Add("abernathy"); 
      /*XmlDocument doc = new XmlDocument(); 
      doc.Load(Server.MapPath("~/Data/States.xml"));*/ 
      try 
      { 
       foreach (string xnl in stringlist) 
       { 

        sbStates.AppendFormat("{0}:", xnl); 
       } 

       sbStates = sbStates.Remove(sbStates.Length - 1, 1); //Removes the extra ":" 
      } 
      catch (Exception ex) 
      { 
       string exp = ex.ToString();  //Setup a breakpoint here 
       //to verify any exceptions raised. 
      } 
      return sbStates.ToString(); 
     } 

回答

0

你現在怎麼沒有理由期待一個JSon對象。只需要一個基於通用字符串的響應,它應該可以正常工作。

如果你想堅持使用JSon對象方法,請嘗試返回一個字符串列表,然後當它被反序列化到JavaScript中時,你會得到一個字符串列表。

更新(如何獲得通過AJAX的字符串):

$.ajax({ 
     url: "/Service/WSDataService.asmx/GetStates",   
     success: function(data) { 
      var datafromServer = data.split(":"); 
      $("[id$='txtautofromDB']").autocomplete({ 
       source: datafromServer 
      }); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      alert(textStatus); 
     } 
    }); 
+0

所以對於dataType:「json」部分,我將如何爲簡單字符串或字符串數​​組編寫它? – MasterP

+0

剛剛更新我的帖子,以顯示如何 –

+0

我仍然得到錯誤。 – MasterP

0

那是最likley因爲你的反應字符串不是JSON解析的。將dataType參數更改爲:

dataType : text 

但是,爲什麼使用POST獲取某些數據?你應該改變它爲GET

+0

現在我只是在將dataType更改爲文本並將POST更改爲GET時發生「錯誤」 – MasterP

+0

如果將POST更改爲GET,則還必須更改/Service/WSDataService.asmx/GetStates處的服務..也許您應該先嚐試僅將dataType更改爲文本 – kannix

+0

將它重新命名爲POST會讓我產生「解析器錯誤」。 – MasterP