繁体   English   中英

AJAX发布成功,但PHP没有响应

[英]AJAX Post Successful but PHP not responding

我在将AJAX POST转换为PHP时遇到问题。

PHP文件中的JS(tableOutput.php)

var changedArr=[];
var undoRedoArr=[];

//For editing data, http://tabulator.info/docs/3.3
$("#tabulator").tabulator({
     cellEdited:function(cell){
    //this is called whenever a cell's value is edited.
      var value = cell.getValue();
      var theID = cell.getRow().getIndex();
      var ip=cell.getRow().getData();
      var field = cell.getField();
      var x=Object.values(ip);
      console.log(ip);
      changedArr.push(x);
      },
});

//called when I hit a button
function saveChanges(){
       $.ajax({
         url: "getInfo.php/",
         type:'POST',
         data: {'ipString':changedArr},
         success: function(){
            alert("SAVED!");
         },
         error: function(XMLHttpRequest, textStatus, error){
            alert("AJAX error: " + textStatus + "; " + error);
         }
       })
   console.log(changedArr);
}

</script>

<?php
   include "getInfo.php";
?>

其他文件中的PHP代码(getInfo.php)

<?php
 if(!empty($_POST['ipString'])){
   echo '<script language="javascript">';
   echo 'alert("Post")';
   echo '</script>';
 }

 if(!empty($_REQUEST['ipString'])){
   echo '<script language="javascript">';
   echo 'alert("Request")';
   echo '</script>';
 }

?>
<html>
  <head>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  </head>
</html>

在文件的前面,我有一个可以运行的GET命令。

tableOutput.php中的HTML

<div class=form>
  <form onsubmit="fillTable()" >
     <input type="submit" name="deny" value="Denied" />
     <input type="submit" name="permit" value="Permitted" />
  </form>
</div>

getInfo.php

$test="'CREATE'";
if( isset( $_GET['deny'] )){
  $test="'DENY'";
}
if( isset( $_GET['permit'] )){
  $test="'CREATE'";
}

在Fedora和Windows上尝试过。 代码在服务器上。 浏览器:Firefox

Ajax发布成功。 我收到一个保存“ SAVED!”的警报框,但是页面上没有任何回声。 如果我改用window.location.href,则getInfo.php回显到页面。 问题是我被重定向到了我不想要的getInfo.php页面。

如何获取Ajax发布到getInfo.php文件? 为什么不起作用?

您似乎在这里尝试混合两种不同的机制(AJAX和回发)。 使用AJAX时,仅echo输出将不会将该内容插入DOM(就像使用完整回发时一样)。 您的echo语句将数据放入输出流,然后由success函数使用。 除非您以编程方式(使用javascript / jQuery)将其插入DOM,否则它将一直存在。 您可以手动将其插入DOM。 有很多方法可以做到这一点。 关键是查看您的响应对象。 这是一种可能性:

function saveChanges(){
       $.ajax({
         url: "getInfo.php/",
         type:'POST',
         data: {'ipString':changedArr},
         success: function(response){
            alert("SAVED!");
            //add the script element to the DOM body
            $(response).appendTo('body');
         },
         error: function(XMLHttpRequest, textStatus, error){
            alert("AJAX error: " + textStatus + "; " + error);
         }
       })
   console.log(changedArr);
}

重要的是要理解,当包含一个php文件(如getInfo.php )时,输出将写在客户端,并且不再可以被php访问。

您想要的是请求getInfo.php,获取其响应,然后将其写入客户端。

客户:

<script>
    function saveChanges(){
       $.ajax({
         url: "getInfo.php/",
         type:'POST',
         data: {'ipString':changedArr},
         success: function(textResponse /* you MUST use this parameter*/){
            alert("SAVED!");
            // textResponse is the string the server sends. do whatever you want with this
            document.getELementById("out").innerHTML = textResponse;
         },
         error: function(XMLHttpRequest, textStatus, error){
            alert("AJAX error: " + textStatus + "; " + error);
         }
       })
   console.log(changedArr);
}
</script>

<div id="out"></div>

在服务器端,重要的是不要包含任何<head><body>标记,否则<div id="out"></div>内将有一个新文档! 您应该只写纯文本,或者可以写在div元素(如表格)中的东西。

服务器:getInfo.php

<?php
if (isset($_POST['ipString'])) {
    echo "A request has been made"; 
}
?>

或编写纯HTML来关闭php标签(一个不错的技巧):

<?php
if (isset($_POST['ipString'])) {
    ?>
    A request has been made
    <?php
}
?>

如果您的getInfo.php文件需要具有其<head><body>标记,则必须exit()脚本,以便不发送文件的其余部分。

<?php
if (isset($_POST['ipString'])) {
    echo "A request has been made"; 
    exit(); // exit here so ajax doesn't get the rest of the file
}
?>
<html>
    <head></head>
    <body></body>
</html>

最后,如果您想变得灵活,并让客户端根据服务器发送的内容进行操作,则应尝试使用JSON将对象转换为字符串,反之亦然。

问题不在于发布的代码。 在getInfo.php的开头,我忘记添加“ php”,它是:

<?

代替:

<?php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM