zoukankan      html  css  js  c++  java
  • ajax post提交的方式

    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");

  • 相关阅读:
    1010 幂次方
    1316 丢瓶盖
    1182 数列分段2
    Mysql动态SQL语句标签
    知了CMS开发说明文档(ibeetl) 建站系统文档
    BeanUtils.populate()的用法
    如何将网页的title前面的图标替换成自己公司的图标
    HTTP、HTTPS常用的默认端口号
    项目的xml文件中经常使用的sql语句
    Invalid bound statement(not found): com.xxx.xxx.xxx.xxxMapper.save
  • 原文地址:https://www.cnblogs.com/xuejianxiyang/p/4885304.html
Copyright © 2011-2022 走看看