我的HTML文件包含一个只有textarea的表单,其内容被发送到java servlet(称为“编译器”)。 textarea文本将始终是java代码,因此它可能包含+,%,=等字符。 我正在使用ajax来获取并显示来自servlet的响应。 但是使用ajax会破坏表单发送的整个数据,因为它会删除部分文本或者完全忽略我上面提到的字符。
这是我的html文件:
<html>
<head>
<script type="text/javascript">
function objetoAjax(){
http_request= false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
return http_request;
}
function devolver_resultado(){
var llamadaAjax = objetoAjax();
var codigo = document.getElementById('codigo').value;
llamadaAjax.open("POST",'Compiler',true);
llamadaAjax.onreadystatechange = function() {
if(llamadaAjax.readyState == 4){
document.getElementById("resultado").innerHTML = llamadaAjax.responseText;
}
};
llamadaAjax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
llamadaAjax.send('codigo='+codigo);
}
</script>
</head>
<body>
<form action="Compiler" method="post">
<textarea rows="18" cols="70" id="codigo" name="codigo"></textarea>
<input type="submit" value="Compile" onclick="devolver_resultado(); return false;">
</form>
<div id="resultado">
</div>
</body>
</html>
我调试了javascript以查看问题是否是我将textarea值分配给“codigo”变量的地方: var codigo = document.getElementById('codigo')。value; (screenshot)
但是这个变量正在被正确设置,所以我怀疑请求被错误编码(screenshot)。 我是ajax的新手,但我认为这是由 llamadaAjax.setRequestHeader(“Content-Type”,“application / x-www-form-urlencoded”)控制的;
From this page我知道我应该将表单编码为multipart / form-data。我尝试将编码类型添加到表单中: 但这没有帮助。
所以,这里有两个问题:
1)实际上这条线是错误的吗?的 llamadaAjax.setRequestHeader( “内容类型”, “应用程序/ x WWW的形式进行了urlencoded”) 如果是这样,我该如何解决?
2)如果那不是bug的地方,还有什么可能发生? (记住,删除所有的ajax并保留一个调用我的“编译器”servlet的普通表单按预期工作,因此servlet没有错误)。
谢谢!
答案 0 :(得分:0)
解决。
我需要的只是在发送之前对文本进行编码:
llamadaAjax.send('codigo='+encodeURIComponent(codigo));