我在http://homepage.cs.uiowa.edu/~csoultz/Lab6/mySite.html的类Web服务器上有一个项目,在该项目中有一个表单可以对服务器执行ajax GET调用。 GET请求URL看起来像http://homepage.cs.uiowa.edu/~csoultz/Lab6/php/ajaxForm.php?name=me&email=me%40us.com&birthday=12%2F01%2F1998#
。在服务器上有一个.php文件,它接受GET请求并返回响应。提交表单后,浏览器会正确接收数据,然后在调用onload函数后,浏览器会将自身重定向到http://homepage.cs.uiowa.edu/~csoultz/Lab6/mySite.html?name=me&email=me%40us.com&birthday=12%2F01%2F1998#
。但是,如果您连续两次运行相同的请求,那么它将按照预期的那样工作。
为什么会这样?
当请求在curl中完成时,它返回状态为200(即没有重定向),并且数据也是正确的。以下是卷曲示例:
C:\Windows\System32>curl -i -X GET "http://homepage.cs.uiowa.edu/~csoultz/Lab6/php/ajaxForm.php?name=me&email=me%40us.com&birthday=12%2F01%2F1998#"
以下是回复:
HTTP / 1.1 200 OK
日期:2016年10月6日星期四15:29:39 GMT
服务器:Apache
严格运输安全:max-age = 31536000; includeSubdomains
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-XSS-Protection:1;模式=块
内容长度:131
连接:关闭
内容类型:text / html; charset = UTF-8
感谢您加入我们的俱乐部!
我们填写了以下信息:
姓名:我
电子邮件:me@us.com
生日:1998年12月1日
这里是执行XMLHttpRequest的js代码:
function askServer() {
var req = new XMLHttpRequest();
var name = document.getElementById("name").value;
var email = document.getElementById("email").value;
var birthday = document.getElementById("datepicker").value;
var dataToSend = "?name=" + name + "&email=" + email + "&birthday=" + birthday;
req.onload = function(){
if ((this.readyState == XMLHttpRequest.DONE) && (this.status == 200))
{
document.getElementById("result").innerHTML = "Reply from the server:\n" + this.responseText;
//console.log(this.responseText);
}
};
req.open("GET", "http://homepage.cs.uiowa.edu/~csoultz/Lab6/php/ajaxForm.php" + dataToSend, true);
req.send();
document.getElementById("result").innerHTML = "The request has been sent.";
}
这是表格:
<form action="#" id="workHourCalculator">
<label for="name">Name* </label>
<input name="name" id="name" type="text" class="inputTextBox" autofocus required><br><br>
<label for="email">Email* </label>
<input name="email" id="email" type="email" class="inputTextBox" required><br><br>
<label for="birthday">Birth Date* </label>
<input name="birthday" type="text" class="inputTextBox" id="datepicker" required><br><br>
<input type="submit" value="Submit Applet" onclick="askServer()">
</form>
最后这里是php:
<?php
$name = $_GET['name'];
$email = $_GET['email'];
$birthday = $_GET['birthday'];
echo ("Thanks for joing our club!\n<br>We have filled the following information:\n<br>");
echo ("Name: ");
echo ($name);
echo ("\n<br>Email: ");
echo ($email);
echo ("\n<br>Birthday: ");
echo ($birthday);
?>
如果有防火墙阻止我没有在我的大学网络之外测试的卷曲电话,我道歉。
任何帮助表示赞赏 提前谢谢!