2015-09-03 3 views
1

Я создаю контактную форму, где, когда пользователь нажимает кнопку отправки, он отправляет электронное письмо компании с помощью вызова ajax. Однако он не передает переменную массива из формы в файл ajax PHP. Кажется, что он работает при успешном протоколировании переменной массива на консоль. Но данные отсутствуют в письме. Вот пример моего кода:jQuery Ajax Не отправляющий массив как объект данных

$("form").submit(function(e) { 
    e.preventDefault(); 
    if ($('#email').val() == $('#cemail').val()) { 
     var arr = []; 
     arr["fname"] = $('#fname').val(); 
     arr["lname"] = $('#lname').val(); 
     arr["email"] = $('#email').val(); 
     arr["subject"] = $('#subject').val(); 
     arr["newsletter"] = $('#newsletter').val(); 
     arr["message"] = $('#message').val(); 

     $.ajax({ 
      url: "contact-ajax.php", 
      method: "POST", 
      data: {d: arr}, 
      success: function (d) { 
       $('button#submit').css('background', '#A2D852'); 
       $('button#submit').html('Message Sent Successfully!'); 
       $('form').get(0).reset(); 
       //alert(d); 
       console.log(arr); 
       setTimeout(function(){     
        $('button#submit').css('background', '#FF8A00'); 
        $('button#submit').html('Send Message <img src="contact/images/loading-icon.gif" id="loading-icon">'); 
        $('#loading-icon').hide(); 
       },3000); 
      }, 
      error: function(jqXHR, textStatus) { 
       $('button#submit').css('background', '#F75D53'); 
       $('button#submit').html('Failed to send. Please try again!'); 
       setTimeout(function(){     
        $('button#submit').css('background', '#FF8A00'); 
        $('button#submit').html('Send Message <img src="contact/images/loading-icon.gif" id="loading-icon">'); 
        $('#loading-icon').hide(); 
       },4000);      
      } 
     }); 
    } 
    else { 
     alert("Your confirmation email does not match your email."); 
     return false; 
    } 
}); 

var_dump($d) возвращает нулевое значение в консоли, но console.log(arr) возвращает действительный массив. Любая помощь будет оценена по достоинству.

+0

Попробуйте это: 'данные: JSON.stringify ({d: обр})' –

+0

@ leo.fcx Still возвращает нуль. –

+0

Используйте вкладку «Сеть» инструментов разработчика вашего браузера, чтобы проверить отправленный запрос. Вы должны уметь видеть полезную нагрузку запроса, которая была (или не была) отправлена ​​на ваш сервер. – gilly3

ответ

1

Вместо использования массива используйте объект.

$("form").submit(function(e) { 
    e.preventDefault(); 
    if ($('#email').val() == $('#cemail').val()) { 

     // from this 
     // var arr = []; 
     // arr["fname"] = $('#fname').val(); 
     // arr["lname"] = $('#lname').val(); 
     // arr["email"] = $('#email').val(); 
     // arr["subject"] = $('#subject').val(); 
     // arr["newsletter"] = $('#newsletter').val(); 
     // arr["message"] = $('#message').val(); 

     // to this : 

     var dataObj = { fname: $('#fname').val(), 
         lname: $('#lname').val(), 
         email: $('#email').val(), 
         subject: $('#subject').val(), 
         newsletter: $('#newsletter').val(), 
         message: $('#message').val()}; 


     $.ajax({ 
      url: "contact-ajax.php", 
      method: "POST", 
      data: dataObj, 
      success: function (d) { 
       $('button#submit').css('background', '#A2D852'); 
       $('button#submit').html('Message Sent Successfully!'); 
       $('form').get(0).reset(); 
       //alert(d); 
       console.log(arr); 
       setTimeout(function(){     
        $('button#submit').css('background', '#FF8A00'); 
        $('button#submit').html('Send Message <img src="contact/images/loading-icon.gif" id="loading-icon">'); 
        $('#loading-icon').hide(); 
       },3000); 
      }, 
      error: function(jqXHR, textStatus) { 
       $('button#submit').css('background', '#F75D53'); 
       $('button#submit').html('Failed to send. Please try again!'); 
       setTimeout(function(){     
        $('button#submit').css('background', '#FF8A00'); 
        $('button#submit').html('Send Message <img src="contact/images/loading-icon.gif" id="loading-icon">'); 
        $('#loading-icon').hide(); 
       },4000);      
      } 
     }); 
    } 
    else { 
     alert("Your confirmation email does not match your email."); 
     return false; 
    } 
}); 
+0

Вау, это решило. Создание массива на объект действительно сработало. –

+0

@ Daniel Отлично! Рад, что это помогло! –

0
$("#YourFormNameGoesHere").submit(function(e) { 
    e.preventDefault(); 
    if ($('#email').val() == $('#cemail').val()) { 
     var form_data = new FormData($('#YourFormNameGoesHere')[0]); 
     $.ajax({ 
      url: "contact-ajax.php", 
      method: "POST", 
      data: form_data, 
      async: true, 
      cache:false, 
      contentType: false, 
      processData: false, 
      success: function (d) { 
       $('button#submit').css('background', '#A2D852'); 
       $('button#submit').html('Message Sent Successfully!'); 
       $('form').get(0).reset(); 
       //alert(d); 
       console.log(arr); 
       setTimeout(function(){     
        $('button#submit').css('background', '#FF8A00'); 
        $('button#submit').html('Send Message <img src="contact/images/loading-icon.gif" id="loading-icon">'); 
        $('#loading-icon').hide(); 
       },3000); 
      }, 
      error: function(jqXHR, textStatus) { 
       $('button#submit').css('background', '#F75D53'); 
       $('button#submit').html('Failed to send. Please try again!'); 
       setTimeout(function(){     
        $('button#submit').css('background', '#FF8A00'); 
        $('button#submit').html('Send Message <img src="contact/images/loading-icon.gif" id="loading-icon">'); 
        $('#loading-icon').hide(); 
       },4000);      
      } 
     }); 
    } 
    else { 
     alert("Your confirmation email does not match your email."); 
     return false; 
    } 
});