页面中有一个下拉列表。更改其值将获得相关数据。
类型为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
}
答案 0 :(得分:3)
当您作为POST请求的一部分发送数据时,数据不会进入查询字符串,而是进入请求的主体(GET请求,相反,没有正文)。您正试图提取" methodName"从查询字符串中,就像您发布到/handlers/ModelHandler.ashx?methodName=blabla
一样,但它不存在,因为这不是您发布的方式。
这可能会为您提供所需的结果:
methodName = Request.Form["methodName"];
答案 1 :(得分:2)
查询字符串是问号后面的URL的一部分。例如,在以下网址中: http://www.example.com/dosomething?action=stuff¶meter=0
“查询字符串”是“action = stuff& parameter = 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"];