我创建了一个httphandler。一切正常。如果你接受请求类型GET。但出于安全原因,我真的不想要GET请求。
我正在使用Jquery使用以下代码发出POST请求:
$.ajax({
type: "POST",
async: false,
url: "SaveAccounts",
data: { a: "Sent Data" },
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function OnSuccess(a) {
alert(a);
},
error: function OnError(request, status, error) {
alert('Error: ' + request + ' ' + status + ' ' + error);
},
complete: function () {
}
});
处理请求的代码是:
context.Response.ContentType = "application/json; charset=utf-8"
Dim s As String = context.Request.Params("a")
context.Response.Write(JsonConvert.SerializeObject(s))
此代码在客户端的javascript警报中返回“null”。
请注意,当$ .ajax()函数中的请求类型更改为GET时,每件事情都能正常工作。
我还尝试使用context.Request.Form(“a”)和context.request.SserverVariables(“a”)
访问发布的数据context.request.Params是'Form','ServerVariables','Cookies'等的组合集合。
请告诉我哪里出错...... ??
感谢您寻找......
答案 0 :(得分:1)
这是通过从请求中删除contentType和dataType规范来实现的。 除此之外的任何事情都将保持不变。
答案 1 :(得分:0)
尝试
data: { "a=Sent Data" },
e.g。来自http://api.jquery.com/jQuery.ajax/
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
HttpHandlers也不喜欢JSON数据,所以摆脱了contentType和dataType。
逃避它 - 一个更完整的例子
var dataString = "{ 'first' : '" + escape($('#fname').val()) +
"', 'mail' : '" + escape($('#tbMail1').val()) +
"', 'mailinglist' : '" + $("input[name='ml']:checked").val() +
"' }";
/*alert(dataString.replace('\',','\',\n'));*/ // just for debugging ;)
$.ajax({
type: "POST",
url: "myAjaxHandler.asmx/ProcessSampleForm",
data: dataString,
cache: false,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
$(".loadingimg").fadeOut();
window.location.replace(msg.d);
},
error:function(xhr,err){
$(".loadingimg").fadeOut();
alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
alert("responseText: " + xhr.responseText);
}
});