Uncaught TypeError: Невозможно прочитать массив 'push' свойства, используя jquery и ajax - PullRequest
0 голосов
/ 21 октября 2018

У меня есть флажок:

<input value="".$count_FRID."" name="rubric_chkbox[]" />

Я использую jquery и ajax, чтобы получить данные и использую цикл foreach, чтобы вставить их в мою базу данных следующим образом:

var rubricChkbox = new Array();
$("input:checked").each(function() {
    rubricChkbox['rubric_chkbox[]'].push($(this).val()); 
});
console.log(rubricChkbox);

$.ajax({
    url: "Queries/save.php",
    type: "POST",
    data: {
        "rubricChkbox":rubricChkbox
    },
    success: function(yey){
        console.log(yey);
        alert(yey);
    }
});

Для удаления флажка:

<input value="1" name="rubric_chkbox[]" type="checkbox" class="checkbox" />
<input value="2" name="rubric_chkbox[]" type="checkbox" class="checkbox" />

jQuery и AJAX:

var rubricChkbox = new Array();
var uncheked = new Array();
$(".checkbox:checked").each(function() {
    rubricChkbox.push($(this).val()); 
});

$(".checkbox:checkbox:not(:checked)").each(function() {
    uncheked.push($(this).val()); 
});
$.ajax({
    url: "Queries/save.php",
    type: "POST",
    data: {
        "rubricChkbox":rubricChkbox
    },
    success: function(yey){
    console.log(yey);
        alert(yey);
    }
});

Например, если значения 1 и 2 вставлены в мою базу данных, и если я не отмеченфлажки 1 и 2, разве код не должен работать для удаления строк?

Я получаю ошибку ниже:

Uncaught TypeError: Cannot read property 'push'

РЕДАКТИРОВАТЬ, save.php:

if (isset($_POST['rubricChkbox']) || isset($_POST['uncheked']) || isset($_POST['user_id'])) {
    $rubric_value = $_POST['rubricChkbox'];
    $rubric_uncheck_value = $_POST['uncheked'];
    $IDuser = $_POST['user_id'];

    foreach($rubric_value as $rubric_check) {
        $sql_check = "SELECT raw_selected_rubric FROM rubric_selected INNER JOIN cmat_composition ON rubric_selected.ID_cmat = cmat_composition.ID_cmat WHERE rubric_selected.ID_users = '$IDuser' AND raw_selected_rubric = '$rubric_check' 
        AND rubric_selected.Saved = '1'";
        $result_check = mysqli_query($conn,$sql_check);

        if (mysqli_num_rows($result_check) <= 0){

            $sql_raw = "INSERT INTO rubric_selected (raw_selected_rubric, Saved, ID_users)

            VALUES  ('$rubric_check', '1', '$IDuser')";

            mysqli_query($conn, $sql_raw); 

        }
    }
}

1 Ответ

0 голосов
/ 21 октября 2018

Вам не нужно ставить скобки [] в переменную вашего массива.Используйте rubricChkbox.push($(this).val());

var rubricChkbox = new Array();
$("input:checked").each(function() {
       if($(this).attr("id") == "option1"){
          // if the id of checkbox is option1 then push it
          rubricChkbox.push($(this).val()); 
       }
});
console.log(rubricChkbox);

$.ajax({
    url: "Queries/save.php",
    type: "POST",
    data: {"rubricChkbox":rubricChkbox
    },
    success: function(yey){
      console.log(yey);
      alert(yey);
    }
});

Редактировать: для вашего дополнительного вопроса, да, вы можете добавить класс, специфичный для ваших флажков, и вместо этого пройти через них;

Запустите приведенный ниже код.

$("button").click(function() {
  var unchecked = new Array();

  $(".checkbox:not(:checked)").each(function() {
    unchecked.push($(this).val());
  });

  console.log(unchecked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input value="1" class="checkbox" type="checkbox" name="rubric_chkbox[]" />
<input value="2" class="checkbox" type="checkbox" name="rubric_chkbox[]" />
<button>Validate</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...