我正在尝试使用AJAX模拟multipart / form-data POST表单,它不起作用,我不知道为什么。我已经检查了正常请求发送的流量(按“提交”按钮)和我的请求,但无法区分。但是,接收页面坚持不检测ajax POST。出了什么问题?
这是我的表格:
<code>
<html>
<script>
// http://www.w3schools.com/ajax
var xmlhttp;
if (window.XMLHttpRequest)
{ // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{ // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
function submitThis( action_page )
{
var boundary1;
boundary1 = '-----------------------------' + makeid();
xmlhttp.open("POST", action_page, false );
xmlhttp.setRequestHeader( 'Content-Type', 'multipart/form-data; boundary=' + boundary1 );
myPostData = "";
myPostData = myPostData + boundary1 + '\r\n';
myPostData = myPostData + 'Content-Disposition: form-data; name="textarea_post"' + '\r\n\r\n';
myPostData = myPostData + 'message1' + '\r\n';
myPostData = myPostData + boundary1 + '--\r\n';
xmlhttp.send( myPostData );
} // submitThis
// http://stackoverflow.com/questions/1349404/generate-a-string-of-5-random-characters-in-javascript
function makeid()
{
var text = "";
var possible = "0123456789abcdef";
for( var i=0; i < 16; i++ )
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
</script>
<body>
<h1>Pruebas de iframe</h1>
<form action="test_ajax_post.php" method="post" enctype="multipart/form-data">
<textarea cols="80" name="textarea_post">message1</textarea><br>
<iframe name="iframe_post" width="80%" src="quixote.html">
</iframe><br>
<input type="submit"><br>
<input type="button" value="Send with ajax" onclick="submitThis('test_ajax_post.php')"/>
</form>
</body>
</html>
这是接收数据“test_ajax_post.html”的页面(非常简单,强硬):
<html>
<body>
<?php
echo "Textarea value: " . $_POST["textarea_post"] . "<br>";
?>
</body>
</html>
问题点击“提交”按钮时的响应是:
<html>
<body>
Textarea value: message1<br></body>
</html>
当我点击'Send with ajax'按钮时(在用fiddler嗅探它之后):
<html>
<body>
Textarea value: <br></body>
</html>
缺少textarea的值。我检查了结果, 几乎是一点一点,我不能说出任何区别。我做错了什么?
注意:使用jQuery或框架不是一个选项,因为我想修改它以发布iFRAME的内容。这是其他事情的第一步。
更多信息:服务器是运行php版本5.3.10的Windows 2003。好吧,这不是最好的情况,但我认为问题不存在。作为客户,我使用过Chrome和Internet Explorer 8.