[英]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.