ajax post

时间:2015-11-25 06:49:52

标签: c# asp.net ajax

页面中有一个下拉列表。更改其值将获得相关数据。 类型为GET时,代码有效。当我将其设置为POST时,参数值为null。为什么会如此。即使类型为“POST'。

,我该如何工作呢?”

JS:

$(".ddlBrands").change(function () {
  getData("GetModels");         
});

function getData(methodName) {               
        $.ajax({
            type:"POST",
            url: "/handlers/ModelHandler.ashx",
            dataType:"json",
            data: { 'methodName': methodName, 'brandId':$(".ddlBrands").val() },
            success: function (resultSet) {},                
            error: function (resultSet) {}
        });
    }

ASHX:

public void ProcessRequest (HttpContext context) 
 {
   context.Response.ContentType = "text/html";
   string methodName = context.Request.QueryString["methodName"]; //null when Type is POST
   string brandId = context.Request.QueryString["brandId"];

   //some more code to get data from DB
 }

2 个答案:

答案 0 :(得分:3)

当您作为POST请求的一部分发送数据时,数据不会进入查询字符串,而是进入请求的主体(GET请求,相反,没有正文)。您正试图提取" methodName"从查询字符串中,就像您发布到/handlers/ModelHandler.ashx?methodName=blabla一样,但它不存在,因为这不是您发布的方式。

这可能会为您提供所需的结果:

methodName = Request.Form["methodName"];

以下是一些示例:Retrieving data from a POST method in ASP.NET

答案 1 :(得分:2)

查询字符串是问号后面的URL的一部分。例如,在以下网址中: http://www.example.com/dosomething?action=stuff&parameter=0

“查询字符串”是“action = stuff& parameter = 0”。这包含两个变量......

  • 操作,其值为“stuff”
  • 参数,值为“0”

当您将方法设置为“GET”时,实际发生的是jQuery获取您的URL并附加“?”用它后面的参数。例如,如果您执行了以下请求:

$.ajax({
	type: "GET",
	url: "/handlers/ModelHandler.ashx",
	dataType: "json",
	data: {
		"methodName": "run",
		"brandId": "3"
	},
	success: function(resultSet) {},
	error: function(resultSet) {}
});

jQuery将做的是告诉你的浏览器“获取”这个URL:“/ handlers / ModelHandler.ashx?methodName = run& brandId = 3”。这将允许ASHX处理程序检索“查询字符串”,或“?”之后的部分。

但是,当您的方法是POST时,它会保留相同的URL,而是将数据传递到请求正文中。以这种方式传递的数据可以使用C#中的“Request.Form []”属性。例如:

string methodName = Request.Form["methodName"];
string brandId = Request.Form["brandId"];