2013-04-18 77 views
1

我的按鈕單擊事件處理程序就像這樣;當它調用圖像處理程序時,Ajax請求不起作用

$(".imgRefreshContact").click(function() { 
     $.ajax({ 
      url: "/Presentation/Site/Handlers/RefreshCaptcha.ashx", 
      type: "POST", 
      cache: false, 
      async: true, 
      success: function() { } 
      }); 
     $("#imgCaptcha").attr('src', '/Presentation/Site/Handlers/CreateCaptcha.ashx'); 
}); 

RefreshCaptcha處理程序;

public void ProcessRequest(HttpContext context) 
    { 
     context.Session["CaptchaMetin"] = ConfirmCode.GenerateRandomCode(); 
    } 

CreateCapthca處理程序;

public void ProcessRequest(HttpContext context) 
    { 
     ConfirmCode cc = new ConfirmCode(context.Session["CaptchaMetin"].ToString(), 136, 36); 

     context.Response.Clear(); 
     context.Response.ContentType = "image/jpeg"; 

     cc.Image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); 

     cc.Dispose(); 
    } 

當我點擊一個按鈕IMG,它的工作完美的在Chrome和Firefox,但無法在IE 9 調試進入RefreshCaptcha處理而不是進入CreateCaptcha處理。 因此,IE做了一次Ajax請求,而不是第二次。

什麼是IE的問題和Ajax請求

+0

任何javascript錯誤?什麼是提琴手說? –

+0

沒有錯誤發生!它沒有做任何事情。 –

+0

你需要有兩個.ajax電話嗎?一個用於RefreshCaptcha,另一個用於CreateCaptcha –

回答

2

使用IE瀏覽器的開發者工具(F12)調試請求。 IE通常會緩存請求,如果您不更改任何內容,它只會返回304狀態碼(未修改)。爲防止出現這種情況,請在ajax調用中添加一個隨機查詢字符串參數。類似於:

url: "/Presentation/Site/Handlers/RefreshCaptcha.ashx?rnd=" + Math.Random() 
+0

謝謝,它工作得很好!但我還有一個問題,IE會緩存使用Math.Random()創建的每個請求嗎?這是否會導致性能或內存問題? –

+1

如果您在不更改任何參數的情況下發送請求,IE將返回304(未修改)。通過添加'Math.Random()'您發送的每個請求都有一個新的'rnd'查詢字符串值。這迫使IE發送請求(因爲從IE的角度來看,這是一個不同的請求)。我已經在沒有問題的企業解決方案中使用這種方法。所以AFAIK,這沒有任何性能/內存問題。 – Kamyar