簡體   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