当前位置: 主页 > 日志 > WEB UI >

未指定Content-Type: application/x-www-form-urlencoded将会导致服务端获取Ajax POST数据失败

默认情况下Ajax以 Content-Type: text/plain 提交数据,此时服务器将忽略POST实体部分的数据,所以服务端程序无法获取POST数据。


解决方法:
指定Content-Type: application/x-www-form-urlencoded 。


测试程序如下:



<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%
    if request("action")="test" then
       response.write request("name")
       response.end
    end if
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>test</title>
<script language="javascript">
 function postform()
 {
    var url='1.asp?action=test';
    
    // 创建XMLHttp对象 
    var xmlhttp = XMLHTTPRequestCompact();
    
    if(!xmlhttp)
       return false;
       
    xmlhttp.open("POST", url, true); 
    
    // 尝试将下面一句注释后的效果
    xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

    xmlhttp.onreadystatechange=function()
    { 
        if (xmlhttp.readyState==4)
        {  
            if (xmlhttp.status == 200)
            { 
                alert(xmlhttp.responseText);
            }
           else
          {
             alert("发送失败!");
           }
        }
    } 
    
    xmlhttp.send('name=redice红冰'); 
  }
  
  
  // 获取XMLHttp
function XMLHTTPRequestCompact()
{
    var req = null;
    
    var msxmlhttp = new Array(
        'Msxml2.XMLHTTP.6.0',
        'Msxml2.XMLHTTP.5.0',
        'Msxml2.XMLHTTP.4.0',
        'Msxml2.XMLHTTP.3.0',
        'Msxml2.XMLHTTP',
        'Microsoft.XMLHTTP');
    for (var i = 0; i < msxmlhttp.length; i++) {
       try {
        req = new ActiveXObject(msxmlhttp[i]);
       } catch (e) {
        req = null;
       }
    }
    
    if (!req && typeof XMLHttpRequest != "undefined") {
       req = new XMLHttpRequest();
       if (req && req.overrideMimeType)
        req.overrideMimeType('text/xml');
    }
    
    if (!req) throw "Can't create XMLHttpRequest object";
    
    return req;
}
</script>
</head>

<body>
<input value="测试" onclick="javascript:postform();" type="button" />
</body>
</html>


附测试程序:
File: Click to Download

[日志信息]

该日志于 2010-10-28 11:44 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “未指定Content-Type: application/x-www-form-urlencoded将会导致服务端获取Ajax POST数据失败” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部