在java脚本中使用post数组传递数据

时间:2017-07-25 10:20:20

标签: javascript php

我尝试在函数执行后从 A.php 加载 B.php ,并使用来自 A.php <的帖子数组传递一些数据/ strong>在同一时间内 B.php

代码列表如下 A.php

<script type="text/javascript">
     alert_for_the_fucntion();
     window.location.href = "B.php";
     function  alert_for_the_fucntion() {
          $.post("B.php", {action: 'test'});
     }
</script>

B.php

<?php 
if (array_key_exists("action", $_POST)) {
    if ($_POST['action'] == 'test') {
        echo 'ok';       
    }    
}    
?>

出于测试目的,我试图回应 B.php 中的内容。但目前这不起作用。我做过任何错误吗?或者有没有可行的方法来做到这一点。

2 个答案:

答案 0 :(得分:3)

您的代码执行此操作:

  1. 告诉浏览器导航到B.php(使用GET请求)
  2. 使用XMLHttpRequest
  3. 触发POST请求

    POST请求可能被取消,因为浏览器立即离开页面(并且XHR请求是异步的)。如果没有,则忽略响应。无论哪种方式,它都没有效果。

    然后,您会在浏览器窗口中看到GET请求的结果(显然,它不包含$_POST['action'])。

    如果您想以编程方式生成POST请求并将结果显示为新页面,则需要提交表单

    不要使用location。不要使用XMLHttpRequest(或任何包围它的内容,例如$.ajax)。

    var f = document.createElement("form");
    f.method = "POST";
    f.action = "B.php";
    
    var i = document.createElement("input");
    i.type = "hidden";
    i.name = "action";
    i.value = "test";
    
    f.appendChild(i);
    document.body.appendChild(f);
    f.submit();
    

    如果您想用JavaScript处理结果,那么:

    1. 不要导航到其他页面(使用“位置”删除该行)
    2. 向Ajax代码添加done处理程序
    3. e.g。

      $.post("B.php", {action: 'test'}).done(process_response);
      
      function process_response(data) {
          document.body.appendChild(
              document.createTextNode(data)
          );
      }
      

答案 1 :(得分:1)

试试这个:

使用Javascript:

<script type="text/javascript">
    window.onload = alert_for_the_fucntion;
    function  alert_for_the_fucntion() {
        $.post("B.php",
               {
                 action: 'test'
               },
               function(data, status){
                  if(status=="success"){
                     alert(data);
                  }
               }
        );
    }
</script>

PHP

<?php 
if(isset($_POST['action'])){
        echo $_POST['action'];       
}
?>