Перейти к содержанию
Официальный форум поддержки Simpla

Как передать все товары из заказа (foreach) через Ajax (POST)?


Рекомендуемые сообщения

Всем здравствуйте!

Помогите пожалуйста решить проблему..

 

Есть форма отправки заказа в СДЭК

 

<form method="" name="osForm" id="osForm">
{foreach $order->purchases as $p}
<div>
<input  name="numbercdek" value="{$order->id|escape}" class="ot12" id="numbercdek{$order->id}">
<input  name="fiocdek" value="{$order->name|escape}" class="ot12" id="fiocdek{$order->id}">
<input  name="phonecdek" value="{$order->phone|escape}" class="ot12" id="phonecdek{$order->id}">
<input  name="pvzcdek" value="{$order->cdek_pvz}" class="ot12" id="pvzcdek{$order->id}">
<input  name="skucdek" value="{$p->sku}" class="ot12" id="skucdek{$order->id}">
<input  name="pricecdek" value="{$p->price|string_format:"%.0f"}" class="ot12" id="pricecdek{$order->id}">
<input  name="pnamcdek" value="{$p->product_name}, {$p->variant_name}" class="ot12" id="pnamcdek{$order->id}">
<input  name="citycdek" value="{$order->cdek_city}" class="ot12" id="citycdek{$order->id}">
<input  name="citycodecdek" value="{$order->cdek_city_code}" class="ot12" id="citycodecdek{$order->id}">
</div>
{/foreach}


<div>
<button name="button" type="button" onclick="sendcdek({$order->id})" data-order_id="{$order->id}" class="button_track">Создать заказ</button>
</div>
</form>

 

И скрипт который ее отправляет

 

{literal}
<script>
function sendcdek(order_id){
	var numbercdek = $('#numbercdek'+order_id).val();
	var fiocdek = $('#fiocdek'+order_id).val();
	var phonecdek = $('#phonecdek'+order_id).val();
	var pvzcdek = $('#pvzcdek'+order_id).val();
	var skucdek = $('#skucdek'+order_id).val();
	var pricecdek = $('#pricecdek'+order_id).val();
	var pnamcdek = $('#pnamcdek'+order_id).val();
	var citycdek = $('#citycdek'+order_id).val();
	var citycodecdek = $('#citycodecdek'+order_id).val();	

    $.ajax({
        type: "POST",
        url: "/test/cdek.php",
        data: {number:numbercdek, fiocdek:fiocdek, phonecdek:phonecdek, pvzcdek:pvzcdek, skucdek:skucdek, pricecdek:pricecdek, pnamcdek:pnamcdek, citycdek:citycdek, citycodecdek:citycodecdek}
    }).done(function( result )
        {
        $("#status_pochta2"+order_id).val( result );
           // $("#status_pochta"+order_id).html( result );
        });    
}
</script>
{/literal}

 

Проблема в следующем: когда в заказе один товар, заказ формируется нормально.

А вот когда более одного то post передает данные только по одному последнему товару.

 

Как передать в post запрос все товары?

 

Ссылка на сообщение
Поделиться на другие сайты

Сейчас для нескольких товаров в форме одинаково называются поля, в результате значения затираются.

Начать с того, что форму создавать правильно, например,   name="numbercdek[]"...

Ссылка на сообщение
Поделиться на другие сайты

Названия полей сделал уникальными

<input  name="skucdek[]" value="{$p->sku}" class="ot12" id="skucdek{$order->id}">

 

А что необходимо подправить в скрипте чтобы все заработало (сейчас также передается только 1 товар)?

Ссылка на сообщение
Поделиться на другие сайты

Ни одна вариация не срабатывает...

var numbercdek = [$('#numbercdek'+order_id).val()];

var numbercdek[] = $('#numbercdek'+order_id).val();

 

Подскажите, пожалуйста, что подправить чтобы отправились все товары.



Пробовал еще так

var numbercdek = document.getElementsByName('numbercdek');

 

но тоже результата нет.

Ссылка на сообщение
Поделиться на другие сайты

потому что надо не в скрипте массив вводить а в форме (первый кусок приведенного вами кода, который html, а не js)

Ссылка на сообщение
Поделиться на другие сайты

Содержимое формы сейчас выглядит вот так

{foreach $order->purchases as $p}
<div>
<input  name="numbercdek[]" value="{$order->id|escape}" class="ot12" id="numbercdek{$order->id}">
<input style=" display: none;" name="fiocdek[]" value="{$order->name|escape}" class="ot12" id="fiocdek{$order->id}">
<input style=" display: none;" name="phonecdek[]" value="{$order->phone|escape}" class="ot12" id="phonecdek{$order->id}">
<input style=" display: none;" name="pvzcdek[]" value="{$order->cdek_pvz}" class="ot12" id="pvzcdek{$order->id}">
<input style=" display: none;" name="skucdek[]" value="{$p->sku}" class="ot12" id="skucdek{$order->id}">
<input style=" display: none;" name="pricecdek[]" value="{$p->price|string_format:"%.0f"}" class="ot12" id="pricecdek{$order->id}">
<input style=" display: none;" name="pnamcdek[]" value="{$p->product_name}, {$p->variant_name}" class="ot12" id="pnamcdek{$order->id}">
<input style=" display: none;" name="citycdek[]" value="{$order->cdek_city}" class="ot12" id="citycdek{$order->id}">
<input style=" display: none;"  name="citycodecdek[]" value="{$order->cdek_city_code}" class="ot12" id="citycodecdek{$order->id}">
</div>
{/foreach}

 

Подскажите что в ней надо подправить, как ввести массив? По идее эта форма выводит все что надо (все товары), но отправляется только один.

Ссылка на сообщение
Поделиться на другие сайты

Отправлять примерно так:

 

data: $('#osForm').serialize()

 

Я так уже пробовал, отправляет только один товар...

Ссылка на сообщение
Поделиться на другие сайты

Отправлять примерно так:

 

data: $('#osForm').serialize()

 

Этот код сработал, спасибо. Отправились все товары. Только он сработал для последнего заказа на странице заказов.

Пробую вот так

 

<form method="" name="osForm{$order->id}" id="osForm{$order->id}">

и в скрипте

data: $('#osForm'+order_id).serialize()


 

Пока не получается...

Ссылка на сообщение
Поделиться на другие сайты

В админке висит два заказа, код вывода формы выше...

У второго заказа в html коде выводится 

<form method="" name="osForm{$order->id}" id="osForm{$order->id}">

 

а у первого нет. Подскажите почему?

 

 

Чертовщина какая то.. form на div меняю - появляется, ставлю form в одном заказе есть во втором нет...

Изменено пользователем esistema1
Ссылка на сообщение
Поделиться на другие сайты

Появилась следующая проблема.

Теперь массив передается в файл обработчик, там формируется xml примерно следующего содержания

 

<Item WareKey="'.$skucdek.'" Cost="1" Payment="'.$pricecdek.'" Weight="300" Amount="1" Comment="'.$pnamcdek.'">
</Item>

 

Переменная принимается следующей строкой

 

$pnamcdek = $_POST['pnamcdek'];

 

 

Когда в файл отправлялся один товар, значения переменных заполнялись правильно. Теперь вместо значений надпись "Array".

 

Как подставить данные из массива и сгенерировать правильный xml запрос?

Ссылка на сообщение
Поделиться на другие сайты

С инструкцией ознакомился...

Я видимо явно что то делаю не так...

 

Написал в файле

 

foreach($skucdek as $skucdek) {
foreach($pricecdek as $pricecdek) {
foreach($pnamcdek as $pnamcdek) {

$xxx = '<Item WareKey="'.$skucdek.'" Cost="1" Payment="'.$pricecdek.'" Weight="300" Amount="1" Comment="'.$pnamcdek.'">
</Item>';
echo $xxx;
}}}

 

В итоге он выводит

 

<Item WareKey="8148" Cost="1" Payment="990" Weight="300" Amount="1" Comment="Платье, 46"></Item>
<Item WareKey="8148" Cost="1" Payment="990" Weight="300" Amount="1" Comment="Блуза, 46"></Item>

 

Подставляется только последняя переменная pnamcdek. Остальные 2 не меняются. Как сделать чтобы заработало?

Ссылка на сообщение
Поделиться на другие сайты

Немного разобрался с массивами... Единственное место где должно быть несколько товаров это Тег item

Сделал его вывод таким

foreach($skucdek as $skucde) {
$Item = $order->addChild('Item', ' ');
$Item->addAttribute('Cost', '1');
$Item->addAttribute('Weight', '300');
$Item->addAttribute('Amount', '1');
foreach($skucdek as $skucde) {
$Item->addAttribute('WareKey', $skucde);
}
foreach($pricecdek as $pricecde) {
$Item->addAttribute('Payment', $pricecde);
}
foreach($pnamcdek as $pnamcde) {
$Item->addAttribute('Comment', $pnamcde);
}
;}

 

Если в заказе 2 товара, он создает 2 тега как положено но содержимое тегов одинаковое.

 

<Item Cost="1" Weight="300" Amount="1" WareKey="8148" Payment="990" Comment="Платье, 46"> </Item>
<Item Cost="1" Weight="300" Amount="1" WareKey="8148" Payment="990" Comment="Платье, 46"> </Item>

 

 

Помогите пожалуйста разобраться с этим.

Ссылка на сообщение
Поделиться на другие сайты

 

С инструкцией ознакомился...

Я видимо явно что то делаю не так...

 

Написал в файле

 

foreach($skucdek as $skucdek) {
foreach($pricecdek as $pricecdek) {
foreach($pnamcdek as $pnamcdek) {

$xxx = '<Item WareKey="'.$skucdek.'" Cost="1" Payment="'.$pricecdek.'" Weight="300" Amount="1" Comment="'.$pnamcdek.'">
</Item>';
echo $xxx;
}}}

Хочется поругаться, но помню как сам начинал...

Давайте сначала посмотрим на конструкцию

 

foreach($skucdek as $skucdek)

вы говорите "Рассмотрим все элементы массива А в виде элемента А" не находите тут противоречий? Нельзя брать переменной название массива, из этого выйдет нереальная каша.

Пойдем дальше

 

$xxx = '

а тут вы обращаетесь к массиву или уже к переменной? Вот именно что этого уже никто не знает, потому что логика нарушена безумно.

Ссылка на сообщение
Поделиться на другие сайты

Помогите пожалуйста разобраться с этим.

 

Чтобы Вам помочь, надо либо написать полностью готовый код с полной отладкой, либо научить Вас с нуля хотя бы основам программирования.

И то и другое требует серьезных усилий. К таким запросам надо бы с Вашей стороны понимание масштабов задачи и готовность оплачивать немалые труды.

А пока что имеем такую картину: Вы взялись  за задачу довольно непростую даже для специалистов, и пытаетесь ее решать методом случайного тыка и слепого копирования...

Ссылка на сообщение
Поделиться на другие сайты

Чтобы Вам помочь, надо либо написать полностью готовый код с полной отладкой, либо научить Вас с нуля хотя бы основам программирования.

И то и другое требует серьезных усилий. К таким запросам надо бы с Вашей стороны понимание масштабов задачи и готовность оплачивать немалые труды.

А пока что имеем такую картину: Вы взялись  за задачу довольно непростую даже для специалистов, и пытаетесь ее решать методом случайного тыка и слепого копирования...

 

 

Понял,  в любом случае спасибо за помощь и подсказки. Практически все получилось сделать, еще немного поизучаю и добью этот обмен со СДЭК...

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...