2012-02-26 6 views
2

Я использую ajax jquery, чтобы запросить aspx, и на этой странице отображается GidView, поэтому ответ будет html-кодом для вида сетки. и я добавляю ответ на DIV, чтобы показать результат, когда я делаю запрос в первый раз, когда он работает нормально, но во второй раз ничего не добавлено из ответа, несмотря на наличие данных для привязки.Как отобразить ответ с страницы aspx с помощью jquery ajax

** Эта проблема появляется ТОЛЬКО в браузерах IE в FireFox, это нормально! **

запрос 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 использует 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, которая является сокращением для метода AJAX в некоторых случаях, как ваш:

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

Кроме того, безопаснее цитировать JSon строку потому что некоторые системы дросселируют на некорректные данные строки json.

Смежные вопросы