我有一个表单,我使用serialize()从表单中获取值并将其发布在ajax中。但我收到内部服务器错误。下面我附上了代码
var formData = $('#loginForm').serialize();
var request = $.ajax({
type: "POST",
url: "/Ajax/Register",
data: formData,
contentType: "application/json; charset=utf-8",
dataType: "json",
});
formData生成username = aaa& password = bbb。我发现formData是个问题。如果我使用data : '{"username":"aaa","password":"bbb"}'
它正在运作。现在我必须通过硬编码来解析数据。有没有任何方法可以做到这一点或解决这个问题?如果我改变type:GET
它也有效。但那不是正确的方法。
答案 0 :(得分:2)
您只需使用serializeArray代替.serialize();
function objectifyForm(formArray) {//serialize data function
var returnArray = {};
for (var i = 0; i < formArray.length; i++){
returnArray[formArray[i]['name']] = formArray[i]['value'];
}
return returnArray;
}
var formData = objectifyForm($('#loginForm').serializeArray());
var request = $.ajax({
type: "POST",
url: "/Ajax/Register",
data: JSON.stringify(formData),
contentType: "application/json; charset=utf-8",
dataType: "json",
});
这可能与以下内容重复: Convert form data to JavaScript object with jQuery
答案 1 :(得分:0)
serialize()
返回一个URL编码的字符串。如果您确实需要JSON,则需要手动创建对象并调用JSON.stringify()
。
var formData = JSON.stringify({
username: $("#loginForm input[name=username]").val(),
password: $("#loginForm input[name=password]").val()
});
有关更自动化的方法,请参阅Serialize form data to JSON
如果服务器脚本支持普通表单数据,您可以使用serialize()
并删除contentType:
选项。
答案 2 :(得分:-1)
serialize()
不会使用表单数据创建对象,而是创建一个字符串。也许您想要使用post方法:
var formData = $('#loginForm').serialize();
var request = $.post(
"/Ajax/Register",
formData
);