#javascript #jquery #ajax #express #form-data
#javascript #jquery #ajax #экспресс #форма-данные
Вопрос:
У меня есть базовая служба обмена сообщениями на веб-узле / экспресс-веб-приложении, и я пытаюсь отправить форму через Ajax, используя объект FormData.
Если я отправляю форму без 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);
}
});
Редактировать
Спасибо Г. Мансуру за его ответы ниже. На случай, если кто-то еще попадет сюда, проблема заключалась в строке:
contentType: false,
В какой-то момент я попробовал эту строку, которая также не работает
contentType: 'application/json',
Но когда я полностью удаляю строку, все работает как обычно… Если кто-нибудь может сказать мне, почему эта строка все нарушала, мне было бы интересно узнать.
Комментарии:
1. задействованы ли файлы? Если не намного проще просто сериализовать форму и избавиться от созданных вами пользовательских настроек
2. Спасибо за комментарий @charlietfl Нет, никаких файлов не задействовано. Я только что попробовал сериализовать форму, как предложил G. Mansour ниже, но я получаю a
parseerror
с неожиданным токеном в позиции 0.3. проверьте фактический запрос в сети инструментов разработчика браузера .. можете увидеть, что возвращается. Это недопустимый json
4. Да, ответ, который я получаю, — это HTML страницы, что мне не очень помогает. Я ввел точку останова XHR, чтобы посмотреть, что это показало, и это просто дало мне объект FormData. Я искал в нем строку сообщения, которую я отправил, но ее там не было…
5. ну, зависит от того, как вы анализируете тело … если вы ищете json для отправки, вам нужно изменить ajax или отправить сообщение
Ответ №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)));
?>
Надеюсь, это вам поможет.
Комментарии:
1. ДА! Это билет. Большое спасибо, я занимался этим часами. Просто для справки,
contentType: false,
это было причиной проблемы. Я отредактирую свой OP с полным описанием…
Ответ №2:
Я проверил ваш код, в нем говорится, что
Незаконный вызов
Итак, я дам решение, которое вы можете использовать
data: $form.serialize(),
dataType: 'json',
И затем вы можете получить возвращенный результат с помощью
console.log(JSON.stringify(e));
Жаль, что это помогает. Если у вас есть какие-то ошибки, я могу вам помочь.
Комментарии:
1. Спасибо @G. Мансур! Я только что попробовал, как вы предложили, но я получаю
parseerror
сообщение, что в позиции 0 есть неожиданный символ. Я забыл упомянуть в своем первоначальном сообщении, что я сначала попытался настроитьFormData($form)
, но я получал те же результаты.2. Можете ли вы изменить функцию ошибки на эту ошибку: function(error) { console.log(JSON.stringify(ошибка)); }
3. Я изменил обработку ошибок, но я не получаю никаких ошибок. Все, что происходит, это то, что я создаю пустой документ сообщения в MongoDB.
4. Попробуйте изменить действие вашей формы на другой пустой файл с простым возвратом, например true или false, и посмотрите, что произойдет, тогда я отправлю вам пример отправки форм с помощью ajax
5. Изменить действие? Что вы имеете в виду, измените URL-адрес сообщения?