【问题标题】:AJAX - Using POST instead of GETAJAX - 使用 POST 而不是 GET
【发布时间】:2011-08-04 01:44:53
【问题描述】:

到目前为止我一直在使用:

xmlhttp.open("GET","server_script.php?q="+str,true);

谢谢

编辑: 我正在为可能遇到此页面的任何人提供一个解决方案,以演示如何使用 POST 而不是 GET。如果您是 AJAX 新手,我会推荐本教程 http://www.w3schools.com/PHP/php_ajax_php.asp 首先使用 GET 方法。

解决方案-

javascript:

xmlhttp.open("POST","script.php",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send('var_name='+str);

php:

$var_name = GET['var_name'];

echo $var_name;

有关使用 POST 和 GET 的原因 - 请参阅 cmets blow。

【问题讨论】:

  • POST 并不比 GET 更“安全”(除了可能不会在历史上留下痕迹)。
  • POST 应该优先用于更改服务器上某些状态的查询。如果您正在执行只读查询(如q= 所示),那么 GET 非常好。 (推测的安全问题涉及 CSRF,对此使用 POST 帮助不大。)

标签: php javascript html ajax


【解决方案1】:

这就是你使用帖子的方式:

var url = "server_script.php";
var params = "q="+str;
xmlhttp.open("POST", url, true);

//Send the proper header information along with the request
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("Connection", "close");

xmlhttp.onreadystatechange = function() {//Call a function when the state changes.
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        alert(xmlhttp.responseText);
    }
}
xmlhttp.send(params);

source

【讨论】:

  • Neal,看起来您再次从 Google 结果中复制了它,几乎没有重写。一些归因将是有序的。 openjs.com/articles/ajax_xmlhttp_using_post.php(也请选择自己输入答案。)
  • @Neal 不是在不注明出处的情况下引用的借口。
  • @Pekka,我添加了来源,在我的上一篇文章中,我还添加了来源当我回答问题时你仍然抱怨
  • @Neal 我在哪里抱怨什么?什么意思?
  • 抱歉@mario 在之前的帖子中说我在复制/粘贴信息,我是这样的,我展示了来源,@mario 仍然抱怨
【解决方案2】:

您显示的查询可能完全可以作为 GET 请求。无需更改它。

使用其中一个的原因是:在服务器端更改状态(即更改数据)的请求通常应使用 POST; “读取”请求应该是 GET。

这具有隐含的安全优势,因为您无法通过将 URL 偷偷带入用户页面(例如,显示 URL 指向名为 deleteall.php 的管理页面的图像)来造成任何损害。

如果您的请求只是检索数据,那么您完全可以使用 GET。

有关何时使用 which 的广泛讨论,请参阅此问题。 GET vs POST in AJAX?

【讨论】:

  • 您好,感谢您的回复。但是我用它来编辑信息。
  • @user 很公平,在这种情况下,切换是有意义的。
猜你喜欢
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
相关资源
最近更新 更多