在jQuery $ .ajax()调用中,如何访问传递给url的数据?

时间:2011-11-01 17:57:41

标签: jquery asp.net

我对ASPX页面进行了以下调用。 ASPX页面执行一些操作并返回一些JSON。所有这些都很好,我们不会改变那个模型。但是JSON是静态的,因为我们此时没有使用参数。

在ASPX页面中,如何访问传递给url的数据?例如,下面的varData包含referenceId。如何在ASPX页面中访问referenceId的值?

function CallService()  
{ 
    $.ajax(
    {
        url         : varUrl,
        type        : varType,
        cache       : false,
        data        : varData, 
        contentType : varContentType,
        processdata : varProcessData, 
        dataType    : varDataType, 
        async       : false,
        success     : function(response) {
                    console.log(response);
                    ProcessParameters(response);
                    },
        error       : function(err) {
                    //alert("error condition triggered");
                    console.log(err);
                    },
        complete    : function() {
                    //alert("complete");
                    console.log("Complete!");
                    }

                })

        }

以上所有参数均在此功能中设定:

function CallDlReportingService() { 

    varGuid = '12345678-1234-4567-8901-123456789012';
    varType = "GET"; 
    varUrl = "http://webServerA/page1.aspx";
    varData = '{"referenceId": "' + varGuid + '"}'; 
    varContentType = "application/json; charset=utf-8";  
    varDataType = "text";  
    varProcessData = true; 
    CallService(); 
}

3 个答案:

答案 0 :(得分:3)

通常,如果您执行GET请求,数据将直接以查询字符串参数(键值对)的形式在URL中编码,如

http://someserver.com/somePage.aspx?id=5&filter=testfilter

因此,在服务器端,您通常可以使用Page.Request.QueryString集合解析参数。

在您的特定情况下,您尝试在GET请求中发送JSON数据,这在某种程度上不太方便,因为您的最终结果(假设“varGuid”= abc)看起来像

http://someserver.com/sompage.aspx?{%22referenceId%22:%20%22abc%22}

这使得解析起来很困难。如果可能,您应该更改varData部分s.t.它看起来像

...
varData = 'referenceId=' + varGuid
...

答案 1 :(得分:1)

您可以使用服务器端代码中的referenceId功能访问HttpWebRequest.Item()(通过GET或POST发送)。

例如:

string refId = Request.Item("referenceId").ToString();

答案 2 :(得分:0)

根据jquery.com,processData参数告诉AJAX将数据写入查询字符串:

  

processData

     

默认情况下,作为对象传入数据选项的数据(技术上,不是字符串)将被处理并转换为查询字符串,适合默认内容类型“application / x-www-form” -urlencoded”。如果要发送DOMDocument或其他未处理的数据,请将此选项设置为false。

<强>更新

正如@Juri指出的那样,发布到查询字符串的数据不会很好,因此您可能难以在后端提取变量。

JQuery提供了$ .param函数来帮助解决这个问题。因此,如果您相应地更改了.ajax调用,则应该可以通过QueryString集合轻松访问JSON数据。

function CallService()       {
      $.ajax(         {
         url         : varUrl,
         type        : varType,
         cache       : false,
         data        : $.param(varData), //<--change
          contentType : varContentType,
         processdata : varProcessData,
          dataType    : varDataType,
          async       : false,
         success     : function(response) {
                     console.log(response);
                     ProcessParameter(response);
                     },
         error       : function(err) {
                     //alert("error condition triggered");
                     console.log(err);
                     },
         complete    : function() {
                     //alert("complete");
                     console.log("Complete!");
                     }
         })

}

那么,在您的aspx页面背后的代码中,您的数据可以作为

访问
Request.QueryString["referenceId"]

同时查看此example,它演示了如何处理json数据中的特殊字符。