2012-08-03 23 views
0

我正在處理一個項目,該項目需要在輸入某些數據時自動完成文本框,並且將從數據庫中提取數據。自動完成Jquery函數在調用webservice時返回內部服務器錯誤

爲此,我創建了一個Web服務作爲 -

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
//[ToolboxItem(false)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[ScriptService] 
public class SearchIssues : System.Web.Services.WebService 
{ 
    //[ScriptMethod]  
    [WebMethod] 
    public string[] GetCompletionList(string prefixText) 
    { 
     DataSet ds = null; 
     DataTable dt = null; 
     OracleConnection conn = null; 
     StringBuilder sb = new StringBuilder(); 
     try 
     { 
      conn = new OracleConnection(WebConfigurationManager.ConnectionStrings["Conn"].ToString()); 
      sb.Append("select issueno from cet_sepcet where issueno like '"); 
      sb.Append(prefixText); 
      sb.Append("%'"); 
      OracleDataAdapter daRes = new OracleDataAdapter(sb.ToString(), conn); 
      ds = new DataSet(); 
      daRes.Fill(ds); 
      dt = ds.Tables[0]; 
     }   
     catch (Exception exc) 
     { 

     } 

     if (conn.State == ConnectionState.Open) 
     { 
      conn.Close(); 
     } 
     List<string> IssueList = new List<string>(); 
     for (int i = 0; i < dt.DataSet.Tables[0].Rows.Count; i++) 
     { 
      IssueList.Add(dt.DataSet.Tables[0].Rows[i][0].ToString()); 
     } 
     return IssueList.ToArray(); 
    } 
} 

我寫了jQuery AJAX方法是 -

  $(function() { 
     $(".tb").autocomplete({ 
      source: function(request, response) {    
      debugger; 
       $.ajax({ 
        url: "SearchIssues.asmx/GetCompletionList", 
        data: request.term, 
        dataType: "json", 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        dataFilter: function(data) { return data; }, 
        success: function(data) { 
         response($.map(data.d, function(item) { 
          return { 
           value: item       
          } 
         })) 
         //alert('Hello'); 
        }, 
        error: function(XMLHttpRequest, textStatus, errorThrown) { 
        debugger; 
         alert(errorThrown); 
        } 
       }); 
      }, 
      minLength: 1 
     }); 
    }); 

WebService的運行完全正常。但是當我嘗試從.aspx頁面調用webservice時,問題就出現了。它的引發內部服務器錯誤。

我不知道我哪裏出錯了。請幫助。

在此先感謝。 Akhil

+0

這個問題仍然在尋求建議和答案......請合作 – akhil 2012-08-03 06:38:07

回答

2

我建議您使用firebug來檢查您的Post是否以這種方式請求和響應,您可以輕鬆地調試您的應用程序。

這一個在你的ajax

data: request.term, 

代碼應該是實際

data: "{'prefixText':'" + request.term+ "'}", 

您的服務期待prefixText字符串作爲parmeter,我認爲request.term是值。

更新

我不知道是不是在你結束這個工作對我的作品:

 <script src="js/jquery-1.4.2.min.js" type="text/javascript"></script> 
     <script src="js/jquery-ui-1.8.custom.min.js" type="text/javascript"></script> 
     <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/> 

     <script type="text/javascript"> 
      $(document).ready(function() {   
       $("input#autocomplete").autocomplete({ 
       source: function (request, response) { 
        $.ajax({ 
         url: "/Service/WSDataService.asmx/GetStatesWithAbbr", 
         data: "{'name':'" + $(autocomplete).val() + "'}", 
         dataType: "json", 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         dataFilter: function (data) { return data; }, 
         success: function (data) { 
          response($.map(data.d, function (item) { 
           return { 
            label: item.Name, 
            value: item.Name 
           } 
          })) 
         } 
        }); 
       }, 
       minLength: 1 
       }); 
      }); 
     </script> 

....

 <input id="autocomplete" /> 

服務:

[WebMethod]   
    public List<State> GetStatesWithAbbr(string name) 
    { 
     List<State> sbStates = new List<State>(); 
     //Add states to the List 
     } 
+0

這肯定會將錯誤從'內部服務器錯誤'更改爲'未知'...休息仍然是相同的...我確信總和需要是肯定會在此方法中丟失更改或總和。 – akhil 2012-08-03 06:25:10

+0

@akhil:請求是否提供服務?嘗試把一個斷點,並檢查 – 2012-08-03 06:26:43

+0

不,我恐怕...它甚至沒有打到服務... – akhil 2012-08-03 06:30:09

0

這段代碼可能會拋出異常,所以請再次驗證它,可能表沒有被檢索或類似的東西。

List<string> IssueList = new List<string>(); 
     for (int i = 0; i < dt.DataSet.Tables[0].Rows.Count; i++) 
     { 
     IssueList.Add(dt.DataSet.Tables[0].Rows[i][0].ToString()); 
    } 
    return IssueList.ToArray(); 
+0

這是隨服務附帶的,它運行良好... – akhil 2012-08-03 06:22:00

0

把這行放到你的Ajax: 數據: '{ 「prefixText」: 「' + request.term + '」}', 它將工作完全與我發生了。

相關問題