serialize()表单显示内部服务器错误

时间:2018-02-07 22:27:55

标签: jquery ajax post

我有一个表单,我使用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它也有效。但那不是正确的方法。

3 个答案:

答案 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
);