2013-03-07 111 views
0

我有一個web方法調用ajax,但調用總是失敗。 以下是需要的代碼。 LetterReportDataStore類轉到數據庫並填充並返回一個數據表。jquery Ajax調用不成功

$(document).ready(function() { 
      BindGridView('eastern'); 

    }); 

    function BindGridView(r) { 
     $.ajax({ 
      type: "POST", 
      url: "AgencyLetterReport.aspx/GetLetterReportData", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) { 
       alert('Success'); 
       for (var i = 0; i < data.d.length; i++) { 
        $("#grdviewe").append("<tr><td>" + data.d[i].Username + 
              "</td><td>" + data.d[i].Name + "</td></tr>"); 
       } 
           }, 
      error: function() { alert('Failed'); } 
     }) 
    } 

    <WebMethod()> _ 
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _ 
Public Shared Function GetLetterReportData() As LetterReportData() 
    Dim region As String = "eastern" 
    Dim list As List(Of LetterReportData) = New List(Of LetterReportData) 
    Dim dt As DataTable = LetterReportDataStore.LoadGridData(region) 

    For Each r As DataRow In dt.Rows 
     Dim _data As LetterReportData = New LetterReportData 
     _data.Username = r.Item(0) 
     _data.Name = r.Item(1) 

     list.Add(_data) 
    Next 
    Return list.ToArray() 
End Function 
+0

你想發佈到一個aspx文件嗎? – Whizkid747 2013-03-07 21:43:02

+0

是的,它的一個aspx頁 – Shaoden 2013-03-07 21:50:19

+0

我已經測試了LetterReportDataStore類檢索數據,它工作正常,所以,它的失敗之後的某個地方。如果我用一個簡單的返回字符串替換webmethod,它就可以工作。我只是不能看到任何錯誤。 – Shaoden 2013-03-07 21:56:59

回答

0

我已經想通了。我改變了我的webmethod到下面。 我在其中一個數據字段中獲得了一些空值,所以我使用了.Tostring使它成爲一個空字符串。我也將列表更改爲一個ArrayList,但我認爲該列表也可以工作。問題是我相信的空值。

<WebMethod()> _ 
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _ 
Public Shared Function GetLetterReportData(ByVal region As String) As ArrayList 
    'Dim region As String = "eastern" 
    Dim list As ArrayList = New ArrayList 
    Dim dt As DataTable = LetterReportDataStore.LoadGridData(region) 

    For Each r As DataRow In dt.Rows 
     Dim _data As LetterReportData = New LetterReportData 
     _data.Username = r.Item(0).ToString 
     _data.Name = r.Item(1).ToString 

     list.Add(_data) 
    Next 
    Return list 
    'Return region 
End Function 

這裏是我的jQuery呼叫

$(document).ready(function() { 
     $("#tabs").tabs(); 
     BindGridView('eastern');   
    }); 

    function BindGridView(r) { 
     $.ajax({ 
      type: "POST", 
      url: "AgencyLetterReport.aspx/GetLetterReportData", 
      data: "{'region' : '" + r + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) { 
       //alert(data.d[0].Username); 
       for (var i = 0; i < data.d.length; i++) { 
        $("#grdviewe").append("<tr class='GridviewScrollC1Item'><td>" + data.d[i].Username + 
              "</td><td>" + data.d[i].Name + "</td>" + 
              "</tr>"); 
       } 
       $('#grdviewe').gridviewScroll({ 
        width: $(window).width() - 200, 
        height: $(window).height() - 200 
       }); 
      }, 
      error: function() { alert('Error on loading data.'); } 
     }) 
    } 

如果您發現在.append調用此行的class = 'GridviewScrollC1Item'。我不得不添加這個,因爲gridview列在數據綁定上丟失了css,並且使列不與標題對齊。儘管gridview設置如下。標題css保持不變,但交替風格和rowstyle丟失。我正在嘗試修復現在改變的行樣式。

<asp:GridView ID="grdviewe" runat="server" Width="100%" ShowHeaderWhenEmpty="True"> 
    <AlternatingRowStyle BackColor="#EEF2FF" /> 
    <HeaderStyle CssClass="GridviewScrollC1Header" /> 
    <RowStyle CssClass="GridviewScrollC1Item" /> 
</asp:GridView> 

希望這有助於任何人!