Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   ajax отправка одного файла из формы (https://javascript.ru/forum/jquery/78880-ajax-otpravka-odnogo-fajjla-iz-formy.html)

daimon0482 17.11.2019 22:36

ajax отправка одного файла из формы
 
Здравствуйте есть форма где циклом выводится несколько товаров и у каждого свой ид, как отправить через ajax ид конкретного товара
<form method="post" id="formtable">
<input type="hidden" id="prodid" name="prodid" value="'.$prodid.'">
<input type="submit" name="submit" value="удалить" class="butdelet">
</form>

так все время отправляется ид последнего товара
$('.butdelet').click(function(){
var msg = $('#formtable').serialize();
$.ajax({
type: 'POST',
url: 'delet_processing.php',
data: msg,
success: function(data) {
location.reload();
},
error:  function(xhr, str){
alert('Возникла ошибка: ' + xhr.responseCode);
}
})
});

рони 17.11.2019 22:40

daimon0482,
var msg = $(this.form).serialize();

daimon0482 17.11.2019 23:04

рони,
нет, тоже последний ид отправляется.

daimon0482 17.11.2019 23:11

получается в одну форму много
<input type="hidden" id="prodid" name="prodid" value="'.$prodid.'">

с одинаковым именем и у каждого есть кнопка удалить
<input type="submit" name="submit" value="удалить" class="butdelet">
тоже с одинаковым именем

рони 17.11.2019 23:15

daimon0482,
не понимаю, ждите специалистов.

laimas 17.11.2019 23:44

Цитата:

Сообщение от daimon0482
получается в одну форму много

Много id="prodid", это бесполезно - выбрасывать, а имя должно быть name="prodid[]"

daimon0482 18.11.2019 00:44

может как то так переименовать, а дальше как это использовать name="prodpriceid'.$prodid.'"

laimas 18.11.2019 00:56

Цитата:

Сообщение от daimon0482
а дальше как это использовать name="prodpriceid'.$prodid.'"

Зачем? Вы используете РНР, значит получать на сервере форму будете из $_POST, и это массив. При именовании полей формы костылем nam1, name2, ... на сервере нужно будет либо карячится с разбором ключей, либо игнорировать их. Они вам нужны? Нет, ваши поля содержат идентификатор, а значит именуя их как name="prodpriceid[]" на сервере будет массив $_POST["prodpriceid"] содержащий все идентификаторы.

daimon0482 18.11.2019 01:07

так мне нужен один идентификатор, при нажатие на кнопку "удалить" чтобы на сервер ушел один идентификатор

daimon0482 18.11.2019 01:08

надо кнопку удалить привязать к идентификатору скорее всего

daimon0482 18.11.2019 01:09

<input type="submit" name="submit" iid="'.$prodid.'" value="удалить" class="butdelet">
возможно так

laimas 18.11.2019 01:16

Цитата:

Сообщение от daimon0482
нет, тоже последний ид отправляется.

Цитата:

Сообщение от daimon0482
тоже с одинаковым именем

А это что за проблемы? Если вам нужно отправить одно значение, которое судя по имени есть уникальный идентификатор, то какая разница как он вообще именуется? При каждой отправке по одним и тем же ключом будет новое значение.

В чем суть проблемы?

daimon0482 18.11.2019 01:16

возможно так пойдет
но нужно другой атрибут вместо .attr

$('.butdelet').click(function(){
var iid = $(this).attr("iid");
$.ajax({
type: 'POST',
url: 'delet_processing.php',
data: "prodid="+iid,
dataType:"html",
cache: false,,
success: function(data) {
location.reload();
},
error:  function(xhr, str){
alert('Возникла ошибка: ' + xhr.responseCode);
}
})
});

laimas 18.11.2019 01:26

Выбросьте скрытые поля и кнопки submit, вместо них кнопки типа button, но так:

<button class="butdelet" type="button" value="'.$prodid.'">Del</button>


В коде отправки:

$('.butdelet').click(function(){
    $.ajax({
        type: 'POST',
        url: 'delet_processing.php',
        data: "prodid="+this.value,
        //......

daimon0482 18.11.2019 23:06

laimas,
спасибо за помощь все работает.

daimon0482 19.11.2019 22:11

laimas,
как добавить тут еще одно поле
<input type="hidden" id="orderid" name="orderid" value="'.$idorderes.'">

laimas 20.11.2019 02:41

Это что, порядок его сортировки в таблице, который руками определяется?

daimon0482 20.11.2019 17:38

laimas,
.$prodid. это был id продукта который хотим удалить,
$idorderes это id заказа,
чтобы удалить один из товаров надо знать его id и id заказа откуда будем удалять

daimon0482 20.11.2019 17:41

.$prodid. мы уже отправляем надо теперь как то зацепить и $idorderes

laimas 20.11.2019 18:40

Не знаю из чего формируется страница, самих данных, но возможны два способа, в зависимости от структуры данных. Если в цикле и ID заказа, и ID товара в одном массиве, который доступен в каждой итерации, и они расположены в начале/конце его, то берем срез этого массива и помещаем в кнопку (в примере для случая когда они в конце):

<button class="butdelet" type="button" value="'.http_build_query(array_slice($arr, -2)).'">Del</button>


где, $arr массив данных в итерации. Если, к примеру, это будут под ключами 'order'=>22 и 'id'=>12, то в итоге будет:

<button class="butdelet" type="button" value="order=22&id=12">Del</button>


Если такое не возможно, формируйте сами параметры запроса в цикле, как:

<button class="butdelet" type="button" value="order='.$order.'&id='.$id.'">Del</button>


Конкретные имена нужных вам ключей подставьте и будете получать нужное на сервере. JS код отправления менять не требуется.

daimon0482 20.11.2019 20:32

на странице $idorderes он один не в цикле
только товар в цикле выводится

daimon0482 20.11.2019 20:35

<button class="butdelet" type="button" value="order='.$order.'&id='.$id.'">Del</button>

так вроде понятно все но сам js отправляет только "prodid="+this.value,
может добавить "order"+"prodid="+this.value,

laimas 21.11.2019 02:39

key1=val&key2=val и т.д., это параметры url запроса, они прописаны будут в значении кнопки, их и добавлять. О "prodid="+ забыл, это нужно удалить из кода, должно остаться только this.value. И естественно, на сервере вставляйте свои ключи, не id, а prodid, не order, а чего-то...

daimon0482 21.11.2019 08:03

laimas,
да работает спасибо большое.


Часовой пояс GMT +3, время: 12:59.