2013-02-08 174 views
-1

我有一個AjaxCall.aspx頁面,它將通過.ajax()使用jquery調用另一個頁面。 在AjaxCall.aspx我不得不刪除所有HTML標記只留下Ajax調用頁面加載兩次Asp.net

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AjaxCall.aspx.cs" Inherits="_AjaxCall" %> 

,並在其背後的代碼是在頁面加載事件的簡單。

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.write("{ \"Testing\": \"Hello World!\" }"); 
} 

我監視網絡的Chrome開發者工具Ajax請求,我注意到,每次我做一個Ajax請求AjaxCall.aspx頁面時,它連續兩次請求。後來我進入調試模式來檢查並發現頁面加載事件觸發兩次。 我做了一些挖掘,發現一個空的img src與此有關,但問題是我在AjaxCall.aspx頁面中沒有任何html標記!

我後來試圖添加回HTML身體和表單標記,並嘗試再次調用該頁面,好消息是它加載一次,但只要我將這些HTML標記添加回AjaxCall.aspx,它加載再次兩次。

我不能在我的AjaxCall.aspx上有這些html標籤,因爲它會在請求時返回一個json格式數據,讓這些html標籤在任何調用它的頁面上都會導致錯誤。同時,我不希望它在我所做的每次通話中繼續加載兩次。那麼無論如何要克服這個問題呢?

回答

2

如果您想通過應用程序頁面(.aspx和後面的代碼)提供JSON響應,您必須刷新您的響應並關閉它以停止該過程。

如果你不這樣做,在網頁的.aspx將是回報,可能與某些HTML標籤生成多個請求(如不良SRC IMG)

試試這個:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.write("{ \"Testing\": \"Hello World!\" }"); 
    Response.Flush(); 
    Response.End(); 
} 

此外,您也可以在使用Response.write a Response.Clear之前使用以清除任何代碼可能注入的可選內容,只能確保僅發送此內容。