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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM