繁体   English   中英

带有php和sql-query的AJAX POST仅工作一次

[英]AJAX POST with php and sql-query works only once

我想从列表中使用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>

我的AJAX看起来像这样:

$( ".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(); 
});

这是我的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());

}

我的数据库如下所示:

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代码。

这是一个构造我的html的foreach循环:

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";

其他部分已损坏。 两个字段具有相同的名称。 有时人们看不见树木的树木。

反正谢谢你!

暂无
暂无

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

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