【问题标题】:$_POST['variable'] doesn't work$_POST['variable'] 不起作用
【发布时间】:2018-06-20 09:27:57
【问题描述】:

我有一个带有一些 select 和 textarea 的 html 页面,它们没有被 <form> 标签包围,还有一个运行以下脚本的按钮:

function sendReservationData(){
    var partenzaSel = $( "#selPartenza" ).val();
    var partenzaTArea = $( "#textP" ).val();
    var destinazioneSel = $( "#selDestinazione" ).val();
    var destinazioneTArea = $( "#textD" ).val();
    var nPasseggeri = $( "#selPasseggeri" ).val();

    var baseURL = window.location.origin;
    var serviceURL = baseURL + window.location.pathname;    

    $.post(serviceURL, {'partenzaSel' : partenzaSel, 'partenzaTArea' : partenzaTArea, 'destinazioneSel' : destinazioneSel, 'destinazioneTArea' : destinazioneTArea, 'nPasseggeri' : nPasseggeri},
         function(response){
            location.reload();
         }   
    ); } 

我使用这种方式来构建 url,因为我正在研究 xamp,当我完成时,我必须将我的代码上传到我不知道完整路径或正确 url 的大学服务器中的网站。 当我单击按钮时,我想使用我向您展示的脚本发送的变量来启动事务并对数据库进行一些查询,以便查看是否能够从 select 中收集数据和textarea,在同一个页面,在按钮之后,我写了如下代码,完成与数据库的交互。

 <?php
$Partenza = $partenzaSel = $partenzaTArea = $destinazioneSel = $destinazioneTArea = $nPasseggeri = "";
if (isset($_POST['partenzaSel']) and isset($_POST['partenzaTArea']) and isset($_POST['destinazioneSel']) and isset($_POST['destinazioneTArea']) and isset($_POST['nPasseggeri']) ){

     $partenzaSel = $_POST['partenzaSel'];
     $partenzaTArea = $_POST['partenzaTArea'];
     $destinazioneSel = $_POST['destinazioneSel'];
     $destinazioneTArea = $_POST['destinazioneTArea'];
     $nPasseggeri = $_POST['nPasseggeri'];

     echo $partenzaSel + $partenzaTArea + $destinazioneSel + $destinazioneTArea + $nPasseggeri + "prova";
}                                                   
?>

回显向我显示了任何内容,因此我尝试获取保存在 javascript 中的变量不起作用,我无法使用该值继续我的工作。我错了什么?我能怎么做?谢谢你的帮助。

【问题讨论】:

  • 由于location.reload() 将从服务器重新加载/刷新页面,因此您看不到回显值也就不足为奇了
  • 开始做“var_dump($_POST);”并查看哪些(如果有)变量正在通过以及它们的值是什么。虽然我觉得因为您正在重新加载位置,但实际上并没有提交表单。您将信息发送到脚本,由脚本处理,然后刷新页面。如果您要让它将变量写入文本文件,我确定您会发现它们正在到达那里
  • location.reload() 替换为console.log(response) 查看浏览器调试日志
  • 同样在 PHP 中,连接符是 . 点而不是 + 加号!
  • 我尝试查看控制台。它向我展示了我的源代码以及回声的响应,并且有我想要的值。我不知道为什么页面不打印回声,但在我的最终代码中我不需要它。我只希望变量的值与数据库交互,并且单击后变量似乎不是空的,所以我可以尝试继续我的工作,看看我将编写的查询是否有效。

标签: php jquery post http-post


【解决方案1】:

您的问题是您希望 PHP(服务器端编码)在页面加载后处理某些内容,当您重新加载页面时,就像没有发送任何内容一样,要么将其作为表单发送,要么处理 PHP 响应使用 JQuery 并将其显示在页面上。 JQuery 在浏览器端处于活动状态,只要页面打开,PHP 就会在页面从 Web 服务器发送到浏览器之前进行处理。

制作php端:

`print json_encode($partenzaSel . $partenzaTArea . $destinazioneSel . $destinazioneTArea . $nPasseggeri . "prova");`

然后用前面的jquery:

$.post(serviceURL, {'partenzaSel' : partenzaSel, 'partenzaTArea' : partenzaTArea, 'destinazioneSel' : destinazioneSel, 'destinazioneTArea' : destinazioneTArea, 'nPasseggeri' : nPasseggeri},
     function(response){
        data = JSON.parse(response);
        $("#responseDiv").text(data);
     }   
); }

并在网页上创建一个 id 为“responseDiv”的 div,以便它可以将文本放置在该框中。

【讨论】:

    【解决方案2】:

    请从您的 javascript 中删除 location.reload() 并将您的 php 更改为以下内容。

    <?php
    $Partenza = $partenzaSel = $partenzaTArea = $destinazioneSel = $destinazioneTArea = $nPasseggeri = "";
    if (isset($_POST['partenzaSel']) and isset($_POST['partenzaTArea']) and isset($_POST['destinazioneSel']) and isset($_POST['destinazioneTArea']) and isset($_POST['nPasseggeri']) ){
    
         $partenzaSel = $_POST['partenzaSel'];
         $partenzaTArea = $_POST['partenzaTArea'];
         $destinazioneSel = $_POST['destinazioneSel'];
         $destinazioneTArea = $_POST['destinazioneTArea'];
         $nPasseggeri = $_POST['nPasseggeri'];
    
         echo $partenzaSel . $partenzaTArea . $destinazioneSel . $destinazioneTArea . $nPasseggeri . "prova";
         exit;
    }                                                   
    ?>
    

    如果脚本接收到数据,现在应该会以输出退出脚本。

    【讨论】:

    • 不知道这将如何改善任何事情
    • 它没有任何改进
    • 你在哪里看到你的 php 输出?请记住,您正在发送 ajax 请求,要么使用开发人员工具,要么使用 console.log 响应以查看输出。
    • 我用过console.log。回声不起作用,但变量被保存。我不需要回显,这只是一次尝试,所以我尝试将这些变量与数据库一起使用,以查看它是否像我需要的那样工作。
    【解决方案3】:

    我试过了:

    由于没有提供form code,所以我只是替换了javascript中的测试数据。

    问题原因 因为您在 php 代码中使用 + 而不是 . 最终 echo 所以由于这个 echo 响应 0 我认为是因为这个javascript post callback 不工作它会将其视为failureerror

    是的,@yunus-saha 是对的,即使我不明白如何使用此代码 location.reload()。您可以使用 jquery 的 console.logappend or text 函数。

    HTML

    <html>
       <body>   
         <form method='post' >
    
         <input type='submit' value='submit' onclick='sendReservationData();' />
         </form>
    
       <script type='text/javascript'  src="https://code.jquery.com/jquery-3.3.1.min.js"> 
        </script>
       <script type='text/javascript' >
            function sendReservationData(){
                var partenzaSel = 'partenzaSel';
                var partenzaTArea = 'partenzaTArea';
                var destinazioneSel = 'destinazioneSel';
                var destinazioneTArea = 'destinazioneTArea';
                var nPasseggeri = 'nPasseggeri';
    
               var baseURL = window.location.origin;
               var serviceURL = baseURL + window.location.pathname;    
    
           $.post('php3.php',{"partenzaSel" : partenzaSel, "partenzaTArea" : partenzaTArea, "destinazioneSel" : destinazioneSel,"destinazioneTArea" : destinazioneTArea, "nPasseggeri" : nPasseggeri}, function (data){
            console.log(data);
            });
           }
          </script>
        </body>
      </html>
    

    PHP

    <?php
         $Partenza = $partenzaSel = $partenzaTArea = $destinazioneSel = 
             $destinazioneTArea = $nPasseggeri = "";
          if (isset($_POST['partenzaSel']) and isset($_POST['partenzaTArea']) and 
            isset($_POST['destinazioneSel']) and isset($_POST['destinazioneTArea']) and 
            isset($_POST['nPasseggeri']) ){
           $partenzaSel = $_POST['partenzaSel'];
           $partenzaTArea = $_POST['partenzaTArea'];
           $destinazioneSel = $_POST['destinazioneSel'];
           $destinazioneTArea = $_POST['destinazioneTArea'];
           $nPasseggeri = $_POST['nPasseggeri'];
           echo $partenzaSel .'--'. $partenzaTArea  .'--'.  $destinazioneSel  .'--'.  
          $destinazioneTArea  .'--'.  $nPasseggeri  .'--'.  "prova";
      }                                                   
     ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 2022-11-27
      • 2016-05-25
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      相关资源
      最近更新 更多