2012-02-26 7 views
2

aspxページをリクエストするのにajax jqueryを使用しています。このページにはGidViewが表示されるため、レスポンスはグリッドビューのhtmlコードになります。私はDIVに応答を追加して結果を表示します。最初にリクエストを行うとうまく動作しますが、2回目はバインドするデータがあるにもかかわらずレスポンスから何も追加されません。jquery ajaxを使用してaspxページからレスポンスを表示する方法

**この問題は、FireFoxのIEブラウザでのみ表示されます。 **

AJAXリクエスト:デフォルトで

function getSubTraning(mainId) { 
      $(".res" + mainId).html(""); 
      startLoad(); 
      $.ajax({ 
       url: "ajax/GetSubTraining.aspx", 
       data: { mainId: mainId }, 
       success: function (a) { 
        stopLoad(); 
        $(".res" + mainId).append(a); 
       } 
      }); 

     } 

GetSubTraining.aspx HTMLコード

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="GetSubTraining.aspx.vb" Inherits="Admin_ajax_GetSubTraining" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 


    <form id="form1" runat="server"> 
    <div> 

     <asp:GridView ID="gvSubTraning" runat="server" 
      AutoGenerateColumns="False" 

      BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" 
      BorderWidth="1px" 

      CellPadding="4" EnableModelValidation="True" 
      ForeColor="Black" 

      GridLines="Horizontal" Width="100%" DataSourceID="SqlDataSource1"> 
      <EmptyDataTemplate> 
       No sub training to view ! 
      </EmptyDataTemplate> 
      <Columns> 
       <asp:BoundField DataField="Train_S_Desc_Ar" 
        HeaderText="Sub training needs" 

        SortExpression="Train_S_Desc_Ar"> 
       <HeaderStyle HorizontalAlign="Left" /> 
       <ItemStyle HorizontalAlign="Left" Width="95%" /> 
       </asp:BoundField> 
       <asp:TemplateField ShowHeader="False"> 
        <ItemStyle Width="5%" /> 
       </asp:TemplateField> 
       <asp:TemplateField SortExpression="Train_S_Indx"> 
        <ItemTemplate> 

         <input type="button" class='btnRemoveSub' title="<%# Eval("Train_S_Indx") %>-<%# Eval("Train_M_Indx") %>" value="Remove" /> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Train_S_Indx") %>'></asp:TextBox> 
        </EditItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
      <FooterStyle BackColor="#CCCC99" ForeColor="Black" /> 
      <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" /> 
      <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" /> 
      <%-- <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />--%> 
     </asp:GridView> 
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:Con_New %>" 
      SelectCommand="getSubTtraining" SelectCommandType="StoredProcedure"> 
      <SelectParameters> 
       <asp:QueryStringParameter Name="mainId" QueryStringField="mainId" 
        Type="Int32" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 

    </div> 
    </form> 

答えて

1

、jQueryのAjaxの方法は、データをキャッシュするために、ブラウザを引き起こす、HTTP GETを使用しますあなたの2番目のajaxリクエストがサーバーに到達するのを止めます。代わりに使うHTTP POST:

function getSubTraning(mainId) { 
    $(".res" + mainId).html(""); 
    startLoad(); 
    $.ajax({ 
     type: 'POST', 
     url: "ajax/GetSubTraining.aspx", 
     data: { "mainId": "mainId" }, 
     success: function (data) { 
      stopLoad(); 
      $(".res" + mainId).append(data); 
     } 
    }); 
} 

また、あなたのようないくつかのケースではAjaxのメソッドの短縮形であり、使用のjQueryのpostメソッド、:

function getSubTraning(mainId) { 
    $(".res" + mainId).html(""); 
    startLoad(); 
    $.post({ 
     "ajax/GetSubTraining.aspx", 
     { "mainId": "mainId" }, 
     function (data) { 
      stopLoad(); 
      $(".res" + mainId).append(data); 
     } 
    }); 
} 

また、JSON文字列を引用する方が安全ですなぜなら、いくつかのシステムでは引用符で囲まれていないjson文字列データが詰まるからです。

関連する問題