2014-01-27 56 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