2016-08-02 88 views
0

我有一個HTML/Javascript頁面,正在對.NET ajax處理程序(.ASHX)進行jQuery ajax調用。在第一次調用時,我在數據對象中傳遞的參數是存在且正確的。但在隨後的調用中,它們是NULL。IHttpHandler Request.Params爲什麼在第一次調用時正確,但在第二次調用時是否爲NULL?

的JavaScript設置:

var data = { 

    requestType: "RecentMXMeetings", 
    meetingType: "Maintenance", 
    baseDate: "6/15/2016", 
    daysPast: 90, 
    daysFuture: 30 
} 

$.ajax({ 

    type: "GET", 
    url: "ajaxHandler.ashx", 
    dataType: "text", 
    cache: false, 
    data: data, 

    success: function (result) { 
     alert("Success: " + result.responseText); 
    }, 

    error: function (result) { 
     alert("Error: " + result.responseText); 
    }, 

    fail: function (result) { 
     alert("Error - Fail: " + result.responseText); 
    }, 

    always: function (result) { 
     alert("Always: " + result.responseText); 
    } 

}); 

處理程序代碼(ashx的):

public class ajaxHandler : IHttpHandler { 

    public void ProcessRequest(HttpContext context) { 

     string retJSON = "NODATA"; 

     var x = context.Request.Params["requestType"]; 


     if (!String.IsNullOrEmpty(x)) { 

      switch (x) { 

       case "RecentMXMeetings": 
        retJSON = SerialiseRecentMeetings(context); 
        break; 

        // other cases... 

      } 
     } 

     context.Response.ContentType = "text/plain"; 
     context.Response.Write(retJSON); 
    } 

    public bool IsReusable { 
     get { 
      return false; 
     } 
    } 

    // 
    // SerialiseRecentMeetings() and other methods... 
    // 

} 

我加上 「var x = context....」 斷點。第一次運行時,x ==「RecentMXMeetings」。在第二個和後續運行中,x == null。

這裏是我已經能夠確定在調試它:

如果我更改從AJAX類型「GET」,以「POST」,並運行它,然後改回爲「GET」,並運行它再次,數據對象參數正確返回一次,然後再次調用NULL。在「GET」和「POST」之間來回切換可解決一次呼叫的問題。

問題是間歇性的。有時在四或五次運行後,x會返回「RecentMXMeetings」,然後再次返回null。

在兩次運行之間等待一段時間有時會「重置」它,並且對於該運行將是有利的。然後再回到空。

這是我第一次進入C#中的ajax處理程序,所以我在這方面很新手。

這是緩存問題嗎?這裏是否有異步問題?我可能沒有正確使用或處置HttpHandler?

+0

你可以使用'POST'而不是'GET'嗎? –

+0

嘗試使用fiddler查看您的網絡流量並查看HttpHandler是否實際上每次都獲取查詢字符串。 – Sal

回答

0

事實證明,我的問題與代碼本身本身無關,但我如何運行項目。

Visual Studio,當你點擊「開始調試」按鈕時,將啓動它的根文件(即index.html)的解決方案。除非當前打開的文檔是可運行的類型,例如.html。如果當前打開的窗口是您的類文件之一(即.cs),它將不會嘗試運行類文件,但會在根文檔中啓動調試會話。

但是,如果這是您當前打開的文檔,它將嘗試自行運行通用處理程序(.ashx)。而且,通過這樣做,它不是從index.html頁面開始的,該頁面發出我的ajax調用並將參數發送到Handler。所以,我的Params集合是空的,因爲它實際上是空的。自行運行.ashx不提供任何參數。

因此,將我的調用類型從GET更改爲POST並返回GET後工作的原因是因爲這樣做時,我打開了index.html文件以進行更改,並且當我再次啓動調試會話時,我當前的文檔是index.html文件,而不是通用處理程序.ashx文件。

爲了讓這個愚蠢的錯誤發生,我可能會失去一百個聲望點。但是,如果它幫助別人,那就是了。

相關問題