Javascript 带有php和sql查询的AJAX POST只工作一次
我想用ajax、php和mysql从列表中删除一项。当我重新加载页面时,AJAX请求工作得非常好。但第二次AJAX返回成功,但该项不会从数据库中删除。当我再次重新加载时,AJAX请求再次工作 这是我的html:Javascript 带有php和sql查询的AJAX POST只工作一次,javascript,php,jquery,mysql,Javascript,Php,Jquery,Mysql,我想用ajax、php和mysql从列表中删除一项。当我重新加载页面时,AJAX请求工作得非常好。但第二次AJAX返回成功,但该项不会从数据库中删除。当我再次重新加载时,AJAX请求再次工作 这是我的html: <ul> <li> Name1 <input type="hidden" name="job_id" value="1"> <input type="hidden" name="job_na
<ul>
<li>
Name1
<input type="hidden" name="job_id" value="1">
<input type="hidden" name="job_name" value="Name1">
<input type="hidden" name="job_delete_from_list" value="true">
<input type="submit" title="Löschen" class="btn-del-job" value="1">
</li>
<li>
Name2
<input type="hidden" name="job_id" value="1">
<input type="hidden" name="job_delete_from_list" value="Name1">
<input type="hidden" name="job_delete_from_list" value="true">
<input type="submit" title="Löschen" class="btn-del-job" value="1">
</li>
</ul>
print '<ul>';
$first = true;
foreach ($jobs_exploded as $row ) {
if ($first) {
echo '<li>'.$row;
print '<form class="deleteJobFromList" method="post"><input type="hidden" name="job_id" value="'.$jobId.'">
<input type="hidden" name="job_name" value="'.$row.'">
<input type="hidden" name="job_delete_from_list" value="true">
<input type="submit" title="Löschen" class="btn-del-job" value="1">';
echo '</form></li>';
$first = false;
} else {
echo '<li>'.$row;
print '<form class="deleteJobFromList" method="post"><input type="hidden" name="job_id" value="'.$jobId.'">
<input type="hidden" name="job_delete_from_list" value="'.$row.'">
<input type="hidden" name="job_delete_from_list" value="true">
<input type="submit" title="Löschen" class="btn-del-job" value="1">';
echo '</form></li>';
}
};
echo '</ul></p>'."\n";
这是我的php我知道这是垃圾和不推荐的,不是我的错:
if($_POST['job_deleting']) {
$jobId = $_REQUEST['job_id'];
$jobs = new Jobs;
$deleteJob = $jobs->__deleteJob($jobId);
}
这就是功能:
public function __deleteJobFromList($jobId,$jobName) {
$jobs_query = "SELECT jobs FROM table WHERE id='$jobId'";
$jobs_result = mysql_query($jobs_query);
$jobs_row = mysql_fetch_assoc($jobs_result);
$jobs_imploded = implode(',', $jobs_row);
$jobs_exploded = explode(',', $jobs_imploded);
if(($key = array_search($jobName, $jobs_exploded)) !== false) {
unset($jobs_exploded[$key]);
}
$newJobs = implode(',', $jobs_exploded);
$job_query = "UPDATE table
SET jobs='$newJobs'
WHERE id='$jobId'";
$result = mysql_query($job_query) OR die(mysql_error());
}
我的数据库如下所示:
$( ".btn-del-job" ).click(function(e) {
var target = $(this);
var postData = $(this).closest("form").serialize();
var formURL = "ajax.test.php";
$.ajax({
type: 'POST',
url: formURL,
data: postData,
cache: false,
success: function(data){
console.log(data);
target.closest("li").hide("slow");
},
error: function(jqXHR, textStatus){
alert("Status: "+ jqXHR.status);
alert("textStatus: " + textStatus);
}
});
e.preventDefault();
});
table: id,name,jobs(Name1,Name2) // comma seperated list
我的错误在哪里
提前感谢并致以最诚挚的问候在执行服务器端工作的页面上设置无缓存头
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Pragma: no-cache');
IE特别喜欢缓存Ajax返回。您必须使用最有力的无缓存头来阻止它这样做
当不使用jQuery时,您还需要向Ajax传递一个随机参数或一个时间戳,以诱使IE不缓存。您已经在使用jQuery方法来做同样的事情,但可能仍然需要无缓存头。问题只是html代码。对不起,我没有发布完整的html代码 这是一个foreach循环,它构造了我的html:
<ul>
<li>
Name1
<input type="hidden" name="job_id" value="1">
<input type="hidden" name="job_name" value="Name1">
<input type="hidden" name="job_delete_from_list" value="true">
<input type="submit" title="Löschen" class="btn-del-job" value="1">
</li>
<li>
Name2
<input type="hidden" name="job_id" value="1">
<input type="hidden" name="job_delete_from_list" value="Name1">
<input type="hidden" name="job_delete_from_list" value="true">
<input type="submit" title="Löschen" class="btn-del-job" value="1">
</li>
</ul>
print '<ul>';
$first = true;
foreach ($jobs_exploded as $row ) {
if ($first) {
echo '<li>'.$row;
print '<form class="deleteJobFromList" method="post"><input type="hidden" name="job_id" value="'.$jobId.'">
<input type="hidden" name="job_name" value="'.$row.'">
<input type="hidden" name="job_delete_from_list" value="true">
<input type="submit" title="Löschen" class="btn-del-job" value="1">';
echo '</form></li>';
$first = false;
} else {
echo '<li>'.$row;
print '<form class="deleteJobFromList" method="post"><input type="hidden" name="job_id" value="'.$jobId.'">
<input type="hidden" name="job_delete_from_list" value="'.$row.'">
<input type="hidden" name="job_delete_from_list" value="true">
<input type="submit" title="Löschen" class="btn-del-job" value="1">';
echo '</form></li>';
}
};
echo '</ul></p>'."\n";
另一部分是腐败的。两个字段的名称相同。有时人看不见树木,看不见森林
无论如何谢谢你 我已将标题添加到AJAX请求中,但仍然没有更改:在Ajax调用的页面上?否,在Ajax请求中:$.Ajax{type:'POST',url:formURL,headers:{Cache Control:No store,No Cache,must revalidate,POST check=0,pre check=0,Pragma:No Cache},data:postData,cache:false,等等。另外,我正在使用最新的chrome浏览器。在Ajax调用的页面上尝试它,返回结果的页面。我得到index.php已经发送的标题。然后我把它放在index.php的第一个html上面,没有得到错误。但是问题没有解决。你正在序列化的表单在哪里?你检查了吗postData的值?在您的表单中,Name1和Name2的两个ID都相同。另一方面,您是否正在为每个ID创建表单?@Yehia Sedk:是的,这就是答案。非常注意!:Thx!