收到数据后,ajax调用错误地重定向浏览器但使用curl显示服务器响应中没有重定向

时间:2016-10-06 15:36:20

标签: javascript php ajax xmlhttprequest html-form

我在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*&nbsp;</label>
  <input name="name" id="name" type="text" class="inputTextBox" autofocus required><br><br>

  <label for="email">Email*&nbsp;</label>
  <input name="email" id="email" type="email" class="inputTextBox" required><br><br>

  <label for="birthday">Birth Date*&nbsp;</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);
?>

如果有防火墙阻止我没有在我的大学网络之外测试的卷曲电话,我道歉。

任何帮助表示赞赏 提前谢谢!

0 个答案:

没有答案