2012-08-23 74 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