【问题标题】:How to send parameter POST method in AJAX如何在 AJAX 中发送参数 POST 方法
【发布时间】:2012-12-25 08:46:50
【问题描述】:

在我的网站上,我在 php 中有组合框:

<script type="text/javascript">
function showUserVisits(reservationObjectId)
{
    //alert(reservationObjectId);
    if (reservationObjectId == "")
    {
        document.getElementById("txtHint").innerHTML="";
        return;
    }
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
        }
    }

    xmlhttp.open("GET","get_user.php?q=" +reservationObjectId,true);
    xmlhttp.send();
}       
</script>

<form>
    <select name="users" onchange="showUserVisits(this.value)">
    <!-- <option value="">Select a person:</option> -->
    <option value="1">aaa1</option>
    <option value="2">aaa2</option>
    <option value="3">aaa3</option>
    <option value="4">aaa4</option>
    </select>
    </form>

当用户更改组合框中的项目时,方法 showUserVisits 由 ajax 调用。而且我必须将 reservationObjectId 传递给 get_user.php 站点。它是如何完成的 GET 方法,我想通过 POST 方法传递这个参数,因为在 GET 方法中有人可以更改 id。我该怎么做?

谢谢

【问题讨论】:

  • 别被骗了,post 项目也可以编辑,就像获取项目一样简单。只要确保您始终检查您的数据。
  • @John 你的意思是如果请求通过post 方法发送,参数将显示在 url 中?
  • @DaHaKa:不在 URL 中,但可以使用浏览器扩展轻松修改 POST 参数
  • @xbonez 比如firebug或者有其他扩展?
  • 是的,我认为萤火虫可以做到这一点。您可以劫持任何传出的 AJAX 请求,对其进行更改然后发送。

标签: php ajax post get


【解决方案1】:
<script type="text/javascript">
function showUserVisits(reservationObjectId)
{
//alert(reservationObjectId);
if (reservationObjectId == "")
{
    document.getElementById("txtHint").innerHTML="";
    return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
}
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");          // set header in case of post method
xmlhttp.open("POST","get_user.php",true); // set post method
xmlhttp.send("q="+reservationObjectId); // set data

}

【讨论】:

    【解决方案2】:

    改变这一行:

    xmlhttp.open("GET","get_user.php?q=" +reservationObjectId,true);
    

    到这里:

    xmlhttp.open("POST", url,true);
    

    查看这里了解更多信息:

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms757849(v=vs.85).aspx

    这里有一些例子:

    http://www.openjs.com/articles/ajax_xmlhttp_using_post.php

    其中一个例子(来自上面的链接):

    var url = "get_data.php";
    var params = "lorem=ipsum&name=binny";
    http.open("POST", url, true);
    
    //Send the proper header information along with the request
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.setRequestHeader("Content-length", params.length);
    http.setRequestHeader("Connection", "close");
    
    http.onreadystatechange = function() {//Call a function when the state changes.
        if(http.readyState == 4 && http.status == 200) {
            alert(http.responseText);
        }
    }
    http.send(params);
    

    【讨论】:

    • 是否以这种方式作为 POST 值发送?看起来是作为 GET 值发送的,但 s 也是通过这种方式通过 POST 发送的?
    【解决方案3】:

    下面的代码展示了如何发帖,但是使用 POST 方法也可以更改 id

    xmlhttp.open("POST","get_user.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("q="+encodeURIComponent(reservationObjectId));
    

    【讨论】:

      【解决方案4】:
      xmlhttp.open( "POST", 'get_user.php', true );
      xmlhttp.send( "q="+reservationObjectId );  
      

      但请记住,post 数据也可以编辑,所以在你的 php 文件中,检查值!

      $q = (int) $_POST['q'];
      

      并确保reservationID属于用户

      【讨论】:

      • 对不起,这不起作用,它什么也没发送,我必须添加 http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http.setRequestHeader("内容长度", params.length); http.setRequestHeader("连接", "关闭");现在发送参数
      • @Robert 你只需要设置内容类型。
      【解决方案5】:

      您在.send() 中添加键值对,如下所示:

      xmlhttp.open("POST","get_user.php",true);
      xmlhttp.send("reservationId=" + reservationObjectId);
      

      要添加多个键值对,请使用&amp; 作为分隔符。

      在您的服务器端脚本中,您将能够在$_POST['reservationID'] 中访问它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-03
        • 1970-01-01
        • 2016-04-25
        • 2020-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-09
        相关资源
        最近更新 更多