2016-10-09 2 views
0

У меня есть базовая служба обмена сообщениями в веб-приложении Node/Express, и я пытаюсь отправить форму через Ajax, используя объект FormData.Отправка формы через JQuery Ajax Post Request

Если я отправлю форму без AJAX, тогда все будет хорошо, но с AJAX req.body. все не определены.

На сервере мне нужно искать данные где-то, кроме req.body при использовании AJAX ??

Создание объекта FormData:

var ajaxData = new FormData; 
ajaxData.append('newMessage', $('.new-message').val()) // I've console.logged these, and their values are correct 
ajaxData.append('senderId', $('[name="senderId"]').val()) 
ajaxData.append('senderName', $('[name="senderName"]').val())// I've console.logged these, and their values are correct 
ajaxData.append('recipientId', $('[name="recipientId"]').val()) 
ajaxData.append('recipientName', $('[name="recipientName"]').val())// I've console.logged these, and their values are correct 

И это запрос POST:

$.ajax({ 
    url: $form.attr('action'), 
    type: $form.attr('method'), 
    data: ajaxData, 
    dataType: false, 
    cache: false, 
    contentType: false, 
    processData: false, 
    complete: function() { 
    console.log('message created'); 
    }, 
    success: function(data) { 


    }, 
    error: function(xhr, textStatus, errorThrown) { 
    console.log(xhr.statusText); 
    console.log(textStatus); 
    console.log(errorThrown); 
    } 
}); 

EDIT

Благодаря Г. Mansour за его ответы ниже. В случае, если кто-то получает здесь, проблема была строка:

contentType: false, 

Я попробовал эту линию в какой-то момент, который также не работает

contentType: 'application/json', 

Но когда я удалить строку целиком, все работает нормально ... Если кто-нибудь скажет мне, почему эта линия ломает все, мне было бы интересно узнать.

+0

Есть ли файлы? Если не намного проще просто упорядочить форму и избавиться от пользовательских настроек, которые вы создали – charlietfl

+0

Спасибо за комментарий @charlietfl Нет, нет никаких файлов. Я только что начал сериализовать форму, как предложил Г. Мансур ниже, но я получаю «parseerror» с неожиданным токеном в позиции 0. –

+0

проверяет фактический запрос в браузере dev tools network .. может видеть что возвращается. Недействительно json – charlietfl

ответ

1

Это HTML часть

<form id="form" action="" method="post"> 
<input type="text" name="msgID" id="msgID"> 
<input type="text" name="senderId" id="senderId"> 
<input type="text" name="senderName" id="senderName"> 
<input type="text" name="recipientId" id="recipientId"> 
<input type="text" name="recipientName" id="recipientName"> 
<input type="submit" name="dsq" value="dsqdsq"> 
</form> 

Это часть JavaScript

<script type="text/javascript"> 

$(document).ready(function(){ 
$("#form").submit(function(){ 
    $.ajax({ 
     url: "test.php", 
     data: $("#form").serialize(), 
     type: "POST", 
     dataType: 'json', 
     success: function (e) { 
      console.log(JSON.stringify(e)); 


     }, 
     error:function(e){ 
      console.log(JSON.stringify(e)); 


     } 
    }); 
    return false; 
}); 
}); 

</script> 

И это код PHP

<?php 
die(json_encode(array("status"=>true))); 
?> 

надежда, что поможет вам.

+0

ДА! Это билет. Большое спасибо, я был в этом часами. Для справки это было «contentType: false», что вызывало проблему. Я буду редактировать свой OP с полным описанием ... –

0

Я проверил ваш код он говорит, что это

Illegal invocation

Так я дам решение, которое вы можете использовать

data: $form.serialize(), 
dataType: 'json', 

И тогда вы можете поймать возвращаемый результат по

console.log(JSON.stringify(e)); 

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

+0

Thank @G. Мансур! Я только что попробовал, как вы предложили, но я получаю «parseerror», говоря, что в позиции 0 есть неожиданный персонаж. Я забыл упомянуть в своем оригинальном посте, что сначала попытался установить «FormData ($ form)», но я получал такие же результаты. –

+0

Можете ли вы изменить функцию ошибки на эту ошибку error: function (error) { console.log (JSON.stringify (ошибка)); } –

+0

Я изменил обработку ошибок, но я не получаю никаких ошибок. Все, что происходит, я создаю пустой документ сообщения в MongoDB. –