2010-07-14 97 views
4

我有一個包含JSON數據的jQuery post方法。jQuery POST。無法使用自定義httphandler獲取請求參數

在我的httphandler中,在processRequest方法中,Request [「Operation」]爲空,並且沒有發佈我的數據。我處於SharePoint 2010環境中。

public void ProcessRequest(HttpContext context) 
    { 
     try 
     { 
      string operation = context.Request["Operation"]; // Returns null 

我的JavaScript如下:

function CallService(serviceData, callBack) { 

$.ajax({ 
    type: "POST", 
    url: ServiceUrl, 
    data: { Operation : "activate"}, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (result) { 
     callBack(result); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert(XMLHttpRequest.responseText); 
    } 
}); 

在VS當我評價的HttpContext我找不到貼值調試器。在Firebug中,該值被張貼爲有效的JSON數據。任何我無法獲得參數的原因?

任何幫助表示讚賞。

+0

你嘗試 '應用程序/ x-WWW的形式了urlencoded' 內容類型呢?那麼你可以避免json字符串的解析。 – Ajaxe 2010-09-14 15:25:37

回答

0

也許你受到Same Origin Policy的限制。 ServiceUrl與主叫頁面處於相同的主機名和域嗎?

0

爲什麼你在你的$.ajax()調用中覆蓋contentType選項?如果你忽略了這個,你是否仍然看到null爲Operation值而被髮送?

另外,我覺得對JSON數據格式正確應爲:

{"Operation": "activate"} 

我認爲JSON規範是具體有關,但大多數的框架都沒有那麼嚴格。

1

感謝您的所有輸入人。我決定讀取請求的輸入流,並從中獲取一個鍵值對。我可以通過這種方式訪問​​所有參數。

我也使用$ .toJSON()函數將我的參數傳遞給Ajax調用。 JsonConvert類來自Newtonsoft的JSON.Net程序集。我使用它很多,並強烈建議使用它,如果你使用任何json序列化的東西。

順便說一下,改變輸入參數周圍的引號確實有效。我想繼續使用一個通用的ajax函數並使用$ .toJSON函數,並且通常將所有參數作爲後期數據傳遞給一個對象。

TextReader reader = new StreamReader(context.Request.InputStream); 
     Dictionary<string, string> requestParams = JsonConvert.DeserializeObject<Dictionary<string, string>>(reader.ReadToEnd());  
     try 
     { 

      switch (requestParams["operation"]) 
1

我改變的contentType到application/x-www-form-urlencoded和它做了一個絕招

相關問題