2012-02-26 103 views
2

我使用ajax jquery来请求aspx页面,并且此页面显示GidView,因此响应将是网格视图的html代码。并且我将响应添加到DIV以显示结果,当我在第一次发出请求时正常工作,但第二次没有从响应中添加任何内容,尽管存在要绑定的数据。如何使用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,这会导致浏览器高速缓存中的数据,这反过来停止您的第二个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); 
     } 
    }); 
} 

或者,使用jQuery的POST方法,这是简写形式,在某些情况下,AJAX方法,像你这样的:

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

此外,它是安全引用的JSON字符串数据,因为有些系统会扼杀未加引号的json字符串数据。