amio
@amio
Newbie web-developer)

Почему не происходит создания массива после отлова события?

Добрый день.

Я совсем новичок в разработке, а особенно в JS.

У меня есть событие, которое отлавливает пропадание фокуса с определенного поля, далее при его наступлении должен создаваться объект, который должен аяксом отправляться на определенный адрес. Проблема: событие отлавливается, но объект почему-то не создается, и аяксом уходит пустой объект. Если попробовать убрать аякс, то объект появляется в консоли и все ок (причем, алерт который стоит для тестирования после выполнения аякс запроса срабатывает).

В чем может быть проблема?

$( '#invoice-invoice_number' ).on( 'blur' , function() { 
    var invoice = [];
    invoice['id_partner'] = $( '#invoice-id_partner' ).val();
    invoice['number'] = $( '#invoice-invoice_number' ).val();
    invoice['date'] = $( '#invoice-invoice_date' ).val();
    invoice['contract'] = $( '#invoice-contract' ).val();
    console.log(invoice)
  
        $.get('" . Url::toRoute('invoice/add-to-session') . "?add=' + invoice, function( resp ){
            alert ( invoice );
            })
        });
  • Вопрос задан
  • 137 просмотров
Решения вопроса 2
Stalker_RED
@Stalker_RED
Проблема, скорее всего, из-за неправильного вызова $.get
Объект вручную собирать не обязательно, в jQuery есть .serialize(), а в "чистом" js есть FormData.

$('input[name=invoice-invoice_number]').on('blur', function(){
  let myData = $(this.form).serialize();
  $.ajax({
    url: "/echo/json/",
    method: 'POST',
    data: myData
  }).done(function() {
    console.log (myData)
  });
})

Живая демка: https://jsfiddle.net/wb5nv0u8/
gjSbv4K.png
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
У вас неправильно вызывается jQuery.get().

invoice – массив / объект, его надо вторым параметром передавать. Непонятно, какое строковое значение надо назначить параметру add.

Например, чтобы все данные оказались в GET-переменной "add" можно так:
var url = '<?php echo Url::toRoute('invoice/add-to-session'); ?>';
$.get(
    url,
    { "add" : invoice},
    function( resp){ alert ( JSON.stringify(invoice)) }
);

Корректнее данные для сохранения отправлять не GET, а POST-запросом. Хотя тут это не принципиально.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Вы создаете не объект, а массив. Чтобы создать объект сделайте
var invoice = {};
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы