1. 程式人生 > >ajax碰到請求url過長的問題! ajax中get和post的區別

ajax碰到請求url過長的問題! ajax中get和post的區別

ajax碰到請求url過長的問題

一個超大文字框textarea裡面有大量資料,ajax通過URL請求service返回結果,URL裡面包含了各種引數,當然也包含之前的超大文字框的內容。


之前開發的時候一直用Firefox在除錯,4000長度的字串在textarea裡面通過URL請求都是沒有問題。
提交給測試的時候問題來了,測試人員在IE下面發現問題,textarea裡面字元長度超過2000(大概資料)時,會報JS錯誤,ajax沒有返回值給前臺。

看原先程式碼:
function getJsonData(url) {
    var ajax = Common.createXMLHttpRequest();
    ajax.open("GET", url, false);
    ajax.send(null);
    try {
        eval("var s = " + ajax.responseText);
        return s;
    }
    catch (e) {
        return null;
    }
}
function getData() {
    var url = "BlacklistService.do?datas=" + datasvalue;
    var result = getJsonData(url);
}

網上的解決辦法:
修改使用的XMLHttp的請求為POST,並且把引數和URL分離出來提交。
修改後程式碼如下:
function getJsonData(url, para) {
    var ajax = Common.createXMLHttpRequest();
    ajax.open("POST", url, false);
    ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    ajax.send(para);
    try {
        eval("var s = " + ajax.responseText);
        return s;
    }
    catch (e) {
        return null;
    }
}
function getData() {
    var url = "BlacklistService.do";
    var para = "datas=" + datasvalue;
    var result = getJsonData(url, para);
} 

Ajax中的get和post兩種請求方式的異同

Ajax中我們經常用到get和post請求.那麼什麼時候用get請求,什麼時候用post方式請求呢? 在做回答前我們首先要了解get和post的區別.

1、get是把引數資料佇列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。使用者看不到這個過程。
2、對於get方式,伺服器端用Request.QueryString獲取變數的值,對於post方式,伺服器端用Request.Form獲取提交的資料。兩種方式的引數都可以用Request來獲得。
3、get傳送的資料量較小,不能大於2KB。post傳送的資料量較大,一般被預設為不受限制。但理論上,因伺服器的不同而異.
4、get安全性非常低,post安全性較高。
5、<form method="get" action="a.asp?b=b">跟<form method="get" action="a.asp">是一樣的,也就是說,method為get時action頁面後邊帶的引數列表會被忽視;而<form method="post" action="a.asp?b=b">跟<form method="post" action="a.asp">是不一樣的。

另外
Get請求有如下特性:它會將資料新增到URL中,通過這種方式傳遞到伺服器,通常利用一個問號?代表URL地址的結尾與資料引數的開端,後面的引數每一個數據引數以“名稱=值”的形式出現,引數與引數之間利用一個連線符&來區分。
Post請求有如下特性:資料是放在HTTP主體中的,其組織方式不只一種,有&連線方式,也有分割符方式,可隱藏引數,傳遞大批資料,比較方便。

通過以上的說明,現在我們大致瞭解了什麼時候用get什麼時候用post方式了吧,對!當我們在提交表單的時候我們通常用post方式,當我們要傳送一個較大的資料檔案時,需要用post。當傳遞的值只需用引數方式(這個值不大於2KB)的時候,用get方式即可。

現在我們再看看通過URL傳送請求時,get方式和post方式的區別。用下面的例子可以很容易的看到同樣的資料通過GET和POST來發送的區別, 傳送的資料是 username=張三 :
GET 方式, 瀏覽器鍵入http://localhost/?username=張三

GET /?username=%E5%BC%A0%E4%B8%89 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Host: localhost
Connection: Keep-Alive

POST 方式:

POST / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Host: localhost
Content-Length: 28
Connection: Keep-Alive

username=%E5%BC%A0%E4%B8%89

區別就是一個在 URL 請求裡面附帶了表單引數和值, 一個是在 HTTP 請求的訊息實體中。

比較一下上面的兩段文字, 我們會發現 GET 方式把表單內容放在前面的請求頭中, 而 POST 則把這些內容放在請求的主體中了, 同時 POST 中把請求的 Content-Type 頭設定為 application/x-www-form-urlencoded. 而傳送的正文都是一樣的, 可以這樣來構造一個表單提交正文:
encodeURIComponent(arg1)=encodeURIComponent(value1)&encodeURIComponent(arg2)=encodeURIComponent(value2)&.....

注: encodeURIComponent 返回一個包含了 charstring 內容的新的 String 物件(Unicode 格式), 所有空格、標點、重音符號以及其他非 ASCII 字元都用 %xx 編碼代替,其中 xx 等於表示該字元的十六進位制數。例如,空格返回的是 "%20" 。 字元的值大於 255 的用 %uxxxx 格式儲存。參見 JavaScript 的 encodeURIComponent() 方法.

在瞭解了上面的內容後我們現在用ajax的XMLHttpRequest物件向伺服器分別用GET和POST方式傳送一些資料。

GET 方式
var postContent = "name=" + encodeURIComponent("xiaocheng") + "&email=" + encodeURIComponent("
[email protected]
");
xmlhttp.open("GET", "somepage" + "?" + postContent, true);
xmlhttp.send(null);


POST 方式

var postContent = "name=" + encodeURIComponent("xiaocheng") + "&email=" + encodeURIComponent("[email protected]");
xmlhttp.open("POST", "somepage", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//xmlhttp.setRequestHeader("Content-Type", "text/xml"); //如果傳送的是一個xml檔案
xmlhttp.send(postContent);

相關推薦

ajax碰到請求url的問題! ajaxgetpost區別

ajax碰到請求url過長的問題 一個超大文字框textarea裡面有大量資料,ajax通過URL請求service返回結果,URL裡面包含了各種引數,當然也包含之前的超大文字框的內容。 之前開發的時候一直用Firefox在除錯,4000長度的字串在textarea裡面通

HTTP 請求 Get Post 區別

一、原理區別 一般我們在瀏覽器輸入一個網址訪問網站都是GET請求;再FORM表單中,可以通過設定Method指定提交方式為GET或者POST提交方式,預設為GET提交方式。 HTTP定義了與伺服器互動的不同方法,其中最基本的四種:GET,POST,PUT,DELETE,H

PHPgetpost區別

在這裡為大家整理了兩種get和post的區別。 第一種: GET在瀏覽器回退時是無害的,而POST會再次提交請求。 GET產生的URL地址可以被Bookmark(標記),而POST不可以。  GET請求會被瀏覽器主動cache(儲存),而POST不會,除非手動設定。&nbs

ajaxgetpost請求

ajax中get請求五步走: 第一步:建立Ajax物件var xhr = createXhr(); 第二步:設定回撥函式  xhr.onreadystatechange = function() {} 第三步:初始化Ajax物件  xhr.open(‘get’,url

ajaxgetpost兩種請求區別

Ajax(Asynchronous Javascript And XML)即非同步JavaScript和XML,通過在後臺與伺服器進行少量資料交換,AJAX 可以使網頁實現非同步更新;這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新(即區域性重新整理);而

AJAXgetpost請求詳解

一、get()和post()基本區別1.get 是把引數資料佇列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬

解決http的get請求url的問題

在實際專案中,get請求的url經常會過長,導致資料丟失。 所以採用post請求,來解決該問題,寫一個採用post請求的函式即可: function sendByPost(url, ids){     var oForm = document.createElement("

AJAXgetpost傳參知識點

AJAX中XMLHttpRequest以非同步方式的處理程式的特點:  1、建立非同步物件 var xhr = new XMLHttpRequest(); 2、設定請求報文 xhr.open() 發起請求,可以是get、post方式 xhr.setRequestHead

ajaxgetpost的提交、卻別、錯誤處理以及注意事項

<!doctype html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Document</title> </head> <body&

C#GetPost請求的同步及異步方法

iter epo charset result string pty streambuf div httpget 在C#中發起Http請求一般使用HttpWebRequest這個類,下文將使用這個HttpWebRequest對象來對Get和Post的同步及異步請求進行封裝:

HTTP請求getpost的區別是什麽

信息 兩種 緩存 數據 request 取數 安全性 body 數據類型 GET和POST是Http請求中最常用的兩種請求方法 首先介紹GET與POST的差異:   (1)GET請求資源數據,POST向服務器傳遞需要處理的數據   (2)GET傳遞數據大小不超過2kb,PO

Http協議GETPOST請求方法的區別

出場 請求參數 底層 情況下 -type 過去 firefox url sym GET和POST是HTTP請求的兩種基本方法,要說它們的區別,接觸過WEB開發的人都能說出一二。 最直觀的區別就是GET把參數包含在URL中,POST通過request body傳遞

HTTP請求協議GETPOST兩種基本請求方法的區別

GET在瀏覽器回退時是無害的,而POST會再次提交請求。   GET產生的URL地址可以被Bookmark,而POST不可以。   GET請求會被瀏覽器主動cache,而POST不會,除非手動設定。   GET請求只能進行url編碼

HTTP協議GETPOST兩種基本請求方法的區別

GET和POST兩種基本請求方法的區別 GET和POST是HTTP請求的兩種基本方法,要說它們的區別,接觸過WEB開發的人都能說出一二。   最直觀的區別就是GET把引數包含在URL中,POST通過request body傳遞引數。   你可能自己寫過無數個G

C#GetPost請求的同步及非同步方法

在C#中發起Http請求一般使用HttpWebRequest這個類,下文將使用這個HttpWebRequest物件來對Get和Post的同步及非同步請求進行封裝: 新建HttpRequestHelper類: public static class H

HTTP請求GETPOST的分析

近期一位朋友想寫iOS上的應用,打算從微博應用做起,第一步先做一個微部落格戶端出來,然後做一個手機微博應用出來,具體做什麼還不甚清楚,其實是在嘗試中。而我正好在用asio寫網路庫,於是主動提出了承擔web伺服器網路庫的部分,也是為了給我自己封裝的網路庫中增加一個http模組。http大家都不陌生,每天開啟網頁

Node.jsGetPost請求

   對於HTTP請求來說,我們通常使用的是Get和Post,除此之外還有put,delete等,而對於get來說,比較lightweight,只是對字串的傳輸,它會被新增到URL地址裡,屬於URL的一部分;而對於Post來說,就顯得重了一些,它的資料以包的形式存在,除了可以

自用的JavawebGetPost請求方法

Get方法 public String doGet(String url, String... param) { String result = ""; BufferedReader in = null;

【Java】——httpgetpost請求區別

          GET和POST請求都是http的請求方式,使用者通過不同的http請求方式完成對資源(URL)的操作,GET、POST、PUT、DELETE就是對應著對這個資源的查,該,增,刪四個操作,具體點來講GET一般用於獲取|查詢資源資訊,而POST一般用於更新

【面試】HTTPgetpost請求區別

面試時候遇到的一個問題。面試官想聽我說二者有什麼主要區別,二者均作為請求方法,使用場合為什麼不一致,在安全性上為什麼get比post要弱等等。這道題其實多多少少都能說一些,但本著追其根由的想法,回來順手查了查資料,總結如下。如果下次面試的你和我一樣碰到這個問題,