2014-01-27 57 views
1

我有一個webmethod返回一個對象,我無法訪問從jQuery Ajax方法返回的對象。我想訪問HighlightResults並在中繼器中顯示。我不斷收到錯誤:處理請求時發生錯誤。內部服務器錯誤。jQuery ajax webmethod錯誤

我的目標是:

public class SearchResults 
    { 
    internal SearchResults() 
    { 

    } 

    public virtual IQueryable<Document> DocumentResults { get; internal set; } 
    public virtual IQueryable<Page> PageResults { get; internal set; } 
    public virtual IQueryable<Word> WordResults { get; internal set; } 
    public ICollection<String> HighlightResults { get; internal set; } 
    public int QueryTime { get; internal set; } 
    public int TotalResults { get; internal set; } 

} 

我的AJAX功能:

var query = String($('[id$=txtSearch]').val());    
     $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "Viewer.aspx/GetHighlightResults", 
      dataType: "json", 
      data: JSON.stringify({docID: docid, query: query, 
        pageNumber: 1, resultsPerPage: 10}), 
      success: function (response) { 
       alert("Success!!");     
       var data = response.d; 

       // none of these are displaying.... 
       alert(String(data)); 
       alert(String(data.HighlightResults)); 
       alert(String(data.HighlightResults[0])); 

       $.each(data, function(index, item) { 
        alert(item); 
        alert(item.HighlightResults); 

        $("#search-results").append("<b>" + item + "</b>"); 
       }) 
      }, 
      error: function (xhr, status, error) { 
       alert("responseText=" + xhr.responseText + 
         "\n textStatus=" + status + "\n errorThrown=" + error); 
      } 
     }); 

最後,我的Web方法:

[WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public static SearchResults GetHighlightResults(String docID, String query, 
        String pageNumber, String resultsPerPage) 
    { 
     SearchResults results = null; 
     try 
     { 
      ArchiveSearcher searcher = new ArchiveSearcher(); 
      if (!String.IsNullOrEmpty(query) && Convert.ToInt32(docID) > 0 && 
       Convert.ToInt32(pageNumber) > 0 && Convert.ToInt32(resultsPerPage) > 0) 
      { 
       results = searcher.SearchDocument(Convert.ToInt32(docID), query, 
       Convert.ToInt32(pageNumber), Convert.ToInt32(resultsPerPage)); 
      } 
     } 
     catch (Exception ex) 
     { 
      // Log the exception. 
      ArchiveViewer.Logic.ExceptionUtility.LogException(ex, "GetSearchResults in Viewer.aspx.cs"); 
     } 
     return results; 
    } 

幫助表示讚賞。

編輯:如果我從Web方法返回ICollection<String> Highlight結果,我可以從jQuery AJAX功能使用訪問:

success: function (response) { 
    var data = response.d; 
    $.each(data, function(index, item) { 
     alert(item); 
.... 

我想我的問題是關於我如何訪問整個SearchResult所目的。任何想法,我做錯了什麼?

編輯2:我註釋掉一切都在我的ajax成功函數,它仍然失敗。所以問題在於傳授課程。有任何想法嗎?

+0

是否擊中的WebMethod,如果你調試? – Zaki

+0

是的,我正在返回一些東西。但它沒有達到警戒狀態(「成功!!」);我得到的錯誤。 – Tums

+0

是錯誤500嗎? – Zaki

回答

0

啊!!!我想到了。謝謝Zaki,你把我推向了正確的方向!

我在web方法中沒有任何錯誤,但是當我的對象被序列化爲JSON時發生異常。問題是在我的課上連載了IQueryable<T>。我已將其更改爲List<T>,現在一切正常。 (!我一天的生活了)

只要是完整的,訪問客戶端返回的對象正確的方法是:

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "Viewer.aspx/GetSearchResults", 
    dataType: "json", 
    data: JSON.stringify({ docID: docid, query: query, pageNumber: 1, resultsPerPage: 10 }), 
    success: function (response) { 
     var data = response.d.HighlightResults; 
     $.each(data, function (index, item) { 
      $("#search-results").append("<b>" + item + "</b>"); 
     }) 
    } 
...... 
0

通過jQuery的AJAX您通過JSON.stringify數據,但在你的方法,你把它作爲一個正常的字符串

檢查與參考鏈接https://stackoverflow.com/a/6323528/2641723

+0

我知道我傳遞數據的方式是正確的。我用另一種方法做同樣的事情。我很確定我的問題是檢索和訪問數據。 – Tums

0

我做同樣的事情在一個測試項目,它迴歸成功。我可以看到警告射擊:

這裏是我的對象更改:

public virtual IQueryable<string> DocumentResults { get; internal set; } 
    public virtual IQueryable<Page> PageResults { get; internal set; } 
    public virtual IQueryable<string> WordResults { get; internal set; } 

然後在阿賈克斯:

data: JSON.stringify({ 
       docID: 'test', 
       query: 'tet2', 
       pageNumber: 1, 
       resultsPerPage: 10 
      }), 

和:

[WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
     public static SearchResults GetHighlightResults(String docID, String query, 
         String pageNumber, String resultsPerPage) 
     { 
      SearchResults results = null; 
      try 
      { 
       results = new SearchResults(); 
      } 
      catch (Exception ex) 
      { 
       // Log the exception. 
       //ArchiveViewer.Logic.ExceptionUtility.LogException(ex, "GetSearchResults in Viewer.aspx.cs"); 
      } 
      return results; 
     } 

我建議你檢查webmethod中沒有任何例外。

+0

我需要發回我的自定義類(文檔和Word)。不幸的是,字符串是不夠的。 :( – Tums