【发布时间】:2017-02-18 06:26:58
【问题描述】:
我在 Web Node / Express Web 应用程序上有一个基本的消息传递服务,我正在尝试使用 FormData 对象通过 Ajax 提交表单。
如果我在没有 AJAX 的情况下提交表单,那么一切正常,但使用 AJAX 时 req.body。都是未定义的。
在服务器上,使用 AJAX 时,我需要在 req.body 以外的地方查找数据??
创建 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);
}
});
编辑
感谢 G. Mansour 在下面的回答。万一其他人来了,问题就出在这条线上:
contentType: false,
我在某个时候尝试过这条线,它也不起作用
contentType: 'application/json',
但是当我完全删除这条线时,一切都正常运行......如果有人能告诉我为什么这条线会破坏一切,我很想知道。
【问题讨论】:
-
是否涉及文件?如果只是序列化表单并摆脱您创建的自定义设置并不简单
-
感谢@charlietfl 的评论 不,不涉及任何文件。我刚刚尝试按照 G. Mansour 在下面建议的方式对表单进行序列化,但我在位置 0 处得到了一个带有意外标记的
parseerror。 -
检查浏览器开发工具网络中的实际请求..可以看到返回的内容。这是无效的 json
-
是的,我得到的响应是页面的 HTML,这对我没有多大帮助。我设置了一个 XHR 断点来查看显示的内容,它只给了我 FormData 对象。我搜索了我提交的消息字符串,但它不在那里......
-
这取决于您如何解析正文...如果要发送的 json 需要修改 ajax 或发送帖子
标签: javascript jquery ajax express form-data