Javascript 带有php和sql查询的AJAX POST只工作一次

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

我想用ajax、php和mysql从列表中删除一项。当我重新加载页面时,AJAX请求工作得非常好。但第二次AJAX返回成功,但该项不会从数据库中删除。当我再次重新加载时,AJAX请求再次工作

这是我的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";
这是我的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!