ajax的post注意事项

注意post请求的Content-Type为application/x-www-form-urlencoded,参数是在请求体中,即上面请求中的Form Data(后台通过Request.Form["name"]来获取)。

如果Content-Type为application/json;charset=UTF-8或text/plain;charset=UTF-8,则请求表单参数在RequestPayload中(后台用StreamReader方式来读取:

public string GetPayloadData(HttpRequest req)

{

StreamReader r = new StreamReader(req.InputStream);

req.InputStream.Position = 0;

var temStr = r.ReadToEnd();

return temStr;  //json字符串,序列化成对象

}

)。

最近在看书时才真正搞明白,服务器为什么会对表单提交和文件上传做特殊处理,因为表单提交数据是名值对的方式,且Content-Type为application/x-www-form-urlencoded,而文件上传服务器需要特殊处理,普通的post请求(Content-Type不是application/x-www-form-urlencoded)数据格式不固定,不一定是名值对的方式,所以服务器无法知道具体的处理方式,所以只能通过获取原始数据流的方式来进行解析。

jquery在执行post请求时,会设置Content-Type为application/x-www-form-urlencoded,所以服务器能够正确解析,而使用原生ajax请求时,如果不显示的设置Content-Type,那么默认是text/plain,这时服务器就不知道怎么解析数据了,所以才只能通过获取原始数据流的方式来进行解析请求数据。(转自:http://blog.csdn.net/mhmyqn/article/details/25561535)

Ext.Ajax

默认post的Content-Type为application/x-www-form-urlencoded,由于项目中post的一般是json对象,所以改为Content-Type: 'application/json,后台接受到json反序列化为model对象.

function ajax(url,params,jsonObject,successCallback,methodType)
{
if(!url)
{
alert('Ajax缺少参数:请求路径.');
return;
}
if(!methodType)
{
methodType='get';
} var header={};
if(methodType.toLowerCase() =='post')
{
header={ 'Content-Type': 'application/json; charset=utf-8' };
}
if(!jsonObject)
{
jsonObject={};
}
if(!params)
{
params={};
} Ext.Ajax.request({
url: url,
headers: header,
params:params,
jsonData: jsonObject, /*request payload*/
method: methodType,
success: function (response, options) {
if(!successCallback)
{
alertt('操作成功.');
}
else
{
successCallback(response,options);
}
},
failure: function (response, options) {
//Ext.MessageBox.alert('失败', '请求超时或网络故障,错误编号:' + response.status);
},
callback:function(option, success, response){//不管成功失败都可以拿到response
//var res = Ext.decode(response.responseText);
// if (success )
// {
// Ext.MessageBox.alert("成功","成功");
// }
// else {Ext.MessageBox.alert("失败",$(response.responseText).filter("title").html());} //拿到错误页面的标题
}
});
}

get调用:

//ajax参数url,extraparams,jsonObject,callback(response,options),methodtype="get/post"
ajax("Services/Manage.ashx",{method:'GetInitInfo'},null,function(response){
  var dataStr=response.responseText;
  //alertt(dataStr);
  eval("var keyValues="+dataStr);
  (new ExtFormUtils()).setKeyValues("panelFill","panelFill",keyValues);
},"get");

返回值不需要处理的(默认弹出:操作成功.):

ajax("Services/Manage.ashx",{method:'GetInitInfo'});

post调用:

ajax("Services/Manage.ashx",{method:'GetInitInfo'},{Name:'aa',sex:'male',age:21},null,"post");

ajax post提交的方式的更多相关文章

  1. $.AJAX参数提交及后台获取方式

    $.AJAX默认是get方式提交,所以你在后台只能用获取url参数的方式获取,可指定type为post更改提交方式: 在后台可通过Request["控件name/url参数key" ...

  2. ajax数据提交数据的三种方式和jquery的事件委托

    ajax数据提交数据的三种方式 1.只是字符串或数字 $.ajax({ url: 'http//www.baidu.com', type: 'GET/POST', data: {'k1':'v1'}, ...

  3. Django之ORM多对多表创建方式,AJAX异步提交,分页器组件等

    MTV与MVC MTV模型: ​ M:模型层(models.py),负责业务对象和数据库关系的映射(ORM) ​ T:模板层(Template),负责如何把页面展示给用户(HTML) ​ V:视图层( ...

  4. 【http】四种常见的 POST 提交数据方式

    来源:http://www.cnblogs.com/aaronjs/p/4165049.html HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT ...

  5. MVC中处理表单提交的方式(使用html扩展方法+juqery插件)

    这里使用扩展方法来扩展基于jquery.form 插件,实现基于异步的ajax的提交方式.

  6. 四种常见的 POST 提交数据方式

    HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中 POST 一般用来向服务端提交数据,本文 ...

  7. ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码

    首先提出一个问题:在做网站开发的时候,用到了验证码来防止恶意提交表单,那么要如何实现当验证码错误时,只是刷新一下验证码,而其它填写的信息不改变? 先说一下为什么有这个需求:以提交注册信息页面为例,一般 ...

  8. Web 四种常见的POST提交数据方式

    HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中 POST 一般用来向服务端提交数据,本文 ...

  9. (转)四种常见的 POST 提交数据方式

    四种常见的 POST 提交数据方式(转自:https://imququ.com/post/four-ways-to-post-data-in-http.html) HTTP/1.1 协议规定的 HTT ...

随机推荐

  1. python环境中运行程序

    运行Python程序,我们比较常用的是直接在Windows命令提示窗口或者Linux终端或shell窗口中,直接:Python *.py,或者在Linux环境下,在投不中,加入: #!/usr/bin ...

  2. sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段

    sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段   --------------------------------------------- ...

  3. ECSHOP始终显示全部分类方法

    商品分类树需要始终显示所有类别,默认的Ecshop的显示方式为在当前产品页面只显示当前的产品所在的同级及下级分类,这就导致当点开某个产品或者子分 类的时候全局的分类树就不见了. 其实修改的方法很简单. ...

  4. 给VMware下的Linux扩展磁盘空间(以CentOS6.3为例)转

    #查看挂载点:df -h#显示:文件系统 容量 已用 可用 已用%% 挂载点/dev/mapper/vg_dc01-lv_root 47G 12G 34G 25% /tmpfs 504M 88K 50 ...

  5. LNMP软件安装所在的目录详细

    LNMP相关软件安装目录Nginx 目录: /usr/local/nginx/MySQL 目录 : /usr/local/mysql/MySQL数据库所在目录:/usr/local/mysql/var ...

  6. Duilib技巧:背景图片平铺

    贴图的描述 方式有两种    // 1.aaa.jpg    // 2.file='aaa.jpg' res='' restype='0' dest='0,0,0,0' source='0,0,0,0 ...

  7. log4j2配置

    在eclipse使用log4j2的时候遇到个问题: 我已经把log4j2.xml放到/src目录下了,而且设置从trace开始都打印到终端,但是我的程序里trace, info都不打印,到了error ...

  8. DMSFrame 之SqlCacheDependency(一)

    1.SqlCacheDependency都是我们常用的一种Cache写法了.对后面的SQL 2005算是比较成熟的一种缓存模式了,这里介绍一下DMSFrame的SqlCacheDependency是怎 ...

  9. linux下的daemon进程

    转自:http://www.cnblogs.com/xuxm2007/archive/2011/07/29/2121280.html   #include <unistd.h> int d ...

  10. [Android Studio 权威教程]断点调试和高级调试

    好了开始写一个简单的调试程序,我们先来一个for循环 ? 1 2 3 4 5 6 7 8 <code class="language-java hljs ">for ( ...