2016-08-25 2 views
0

Мне нужно обновить строку в базе данных по идентификатору с помощью Ajax.Отправка данных через Ajax из формы

Моя форма:

<form id="update_ajax"> 
    <input type="text" name="name" class="test_hide"> 
    <input type="hidden" name="id" value="<?php echo $row['id']; ?>"> 
    <input type="submit" value="<?php echo $row['id']; ?>" class="pure-button"> 
</form> 

Мой Ajax функции:

$("#update_ajax").on("submit", function() { 
     var id = $(this).attr('id'); 
     var name = $(this).attr('name'); 
     var dataall={'id' : id, 'name' : name}; 
     $.ajax({ 
      type: "post", 
      url: "update.php", 
      data: dataall, 
      success: function (data) { 
       alert(data); 
      } 
     }); 
    }); 

И мой файл РНР:

if ((isset($_GET['id'])) && (isset($_GET['name']))) { 
    $id = $_GET['id']; 
    $name = $_GET['name']; 
}else{ 
    die("Not set"); 
} 
$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "8169x5it"); 
$query = $pdo->prepare("UPDATE test SET name=:name WHERE id=:id"); 
$query->bindParam(':name', $name); 
$query->bindParam(':id', $id); 
$query->execute(); 

И У меня ошибка, что значение name не установлено в $_GET['name']. И я не понимаю, почему он не установлен. Потому что я отправляю его в данные.

+2

'var id = $ (this) .attr ('id');' это неверно [см. Docs] (http://api.jquery.com/val/) – NDM

+1

'$ (this) .attr ('name') 'будет undefined, потому что форма не имеет атрибута' name'. Вы хотите '$ (" input [name = name] "). Val()'. – Barmar

ответ

2

Это неправильно:

var id = $(this).attr('id'); 
var name = $(this).attr('name'); 

$(this) является формой, так $(this).attr('id') является "update_ajax", а не значение скрытого ввода. И $(this).attr('name') не определено, потому что форма не имеет атрибута name=something. То, что вы действительно хотите:

var id = $(this).find("input[name=id]").val(); 
var name = $(this).find("input[name=name]").val(); 

Но вы можете упростить все это:

var dataall = $(this).serialize(); 

serialize() найдет все входы в виде и возвращает строку URL-закодирован, содержащий все их значения.

Наконец, вам нужно либо изменить jQuery, чтобы использовать type: 'GET', либо изменить PHP для использования $_POST вместо $_GET.

+1

Спасибо! Теперь я понимаю. – Denys

+0

Почему, когда я нажимаю обновление, это одно время обновляется без перезагрузки страницы, а во второй раз он не работает без перезагрузки?И мне нужно нажать F5 для обновления данных. – Denys

+0

Иногда это работает, и некоторое время нет. Что это может быть? – Denys

0

Что у вас есть, http://api.jquery.com/attr/

Что вы хотели http://api.jquery.com/val/

Дайте, что выстрел, он должен работать не выглядит как и любые другие ошибки в вашем источнике. Если не сообщите нам.

EDIT:

Также вы меняете:

$(this).attr('id'); 
$(this).attr('name'); 

Для

$("input[name=id]").val(); 
$("input[name=name]").val(); 

Или

$(this).serialize(); 

См https://api.jquery.com/serialize/ для позже

+2

ему также необходимо изменить селектор. – Barmar

Смежные вопросы