Javascript JQuery以正确的格式将html表单转换为JSON

Javascript JQuery以正确的格式将html表单转换为JSON,javascript,jquery,html,json,Javascript,Jquery,Html,Json,我是JQuery的初学者,我正在尝试做一件非常简单的事情:获取一个html表单,将其转换为JSON,将其发送到我的API并显示结果 我读了多篇关于将表单和数组序列化为JSON的文章,但我无法让它工作(我要么得到400-错误的请求响应,因为我的JSON格式不正确,要么出于某种原因处于415状态) 这是Html表单: <form id="imageUploadForm"> <fieldset> <legend>Upload new

我是JQuery的初学者,我正在尝试做一件非常简单的事情:获取一个html表单,将其转换为JSON,将其发送到我的API并显示结果

我读了多篇关于将表单和数组序列化为JSON的文章,但我无法让它工作(我要么得到
400-错误的请求
响应,因为我的JSON格式不正确,要么出于某种原因处于415状态)

这是Html表单:

<form id="imageUploadForm">
        <fieldset>
        <legend>Upload new image</legend>
        <p>
                <label for="imageUrl">Image URL:</label>
                <input id="imageUrl" type="text" name="imageUrl" />
        </p>
        <p>
                <label for="tag">Tag:</label>
                <input id="tag" type="text" name="tag" />
        </p>
        <p>
                <input id="uploadButton" type="button" value="Submit" />
        </p>
        </fieldset>
</form>

<div id="uploadResponse"></div>

您不必解析字符串化的JSON,否则将发送一个JS对象。您必须发送一个表示JSON的字符串

var json = JSON.stringify(jQuery('#imageUploadForm').serializeArray());

尝试将内容类型更改为
contentType:“application/json;charset=utf-8”,
如果api返回的是json集
数据类型:“json”

如果有的话,您的控制台报告是什么?

只需使用
var json=$('#imageUploadForm')。serialize()

根据您的表单,您不需要
serializeArray
,也不需要更改内容类型
contentType:“application/json;charset=utf-8”,

选中此项

var imagedataUrl=$(“#imageUrl”).val();
var tagdataUrl=$(“#tag”).val();
$.ajax({
类型:“POST”,
url:“”,
数据类型:“json”,
数据:{imageUrl:imagedataUrl,标记:tagdataUrl},
contentType:“应用程序/json;字符集=utf-8;”,
跨域:是的,
//如果收到来自服务器的响应
成功:功能(响应){
$(“#上传响应”).append(响应);
},
});

您能检查以下代码和小提琴链接吗

$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
    if (o[this.name] !== undefined) {
        if (!o[this.name].push) {
            o[this.name] = [o[this.name]];
        }
        o[this.name].push(this.value || '');
    } else {
        o[this.name] = this.value || '';
    }
});
return o;
};

$(function() {
$("#imageUploadForm").submit(function(e) {
e.preventDefault();
});
$('#uploadButton').click(function() {
var jsonText = JSON.stringify($('form').serializeObject());
    $('#result').text(JSON.stringify($('form').serializeObject()));
     $.ajax({
    type: "POST",
    url: "<url>",
    data: jsonText,
    crossDomain: true,
    dataType: "text/plain",

    //if received a response from the server
    success: function(response) {
            $("#uploadResponse").append(response);
    },

    });
});
});


http://jsfiddle.net/sxGtM/7142/
$.fn.serializeObject=函数()
{
var o={};
var a=this.serializeArray();
$.each(a,function(){
if(o[this.name]!==未定义){
如果(!o[this.name].push){
o[this.name]=[o[this.name]];
}
o[this.name].push(this.value | |“”);
}否则{
o[this.name]=this.value | |“”;
}
});
返回o;
};
$(函数(){
$(“#imageUploadForm”).submit(函数(e){
e、 预防默认值();
});
$(“#上载按钮”)。单击(函数(){
var jsonText=JSON.stringify($('form').serializeObject());
$('#result').text(JSON.stringify($('form').serializeObject());
$.ajax({
类型:“POST”,
url:“”,
数据:jsonText,
跨域:是的,
数据类型:“文本/普通”,
//如果收到来自服务器的响应
成功:功能(响应){
$(“#上传响应”).append(响应);
},
});
});
});
http://jsfiddle.net/sxGtM/7142/

希望它能对您有所帮助。

您应该提及发送到服务器的内容类型

varContentType="application/json; charset=utf-8";

$.ajax({
    type: varType, //GET or POST or PUT or DELETE verb
    url: varUrl, // Location of the service 
    data: varData, //Data sent to server
    contentType: varContentType, // content type sent to server
    dataType: varDataType, //Expected data format from server
    processData: false,
    crossDomain: true,
});

只需尝试
var json=$('#imageUploadForm')。serialize()
也许这将有助于
contentType:“application/json;charset=utf-8”
尝试使用此答案中的解决方案-您的代码生成以下负载:imageUrl=…&标记=。。。不知何故,它没有将这些数据解释为JSONUse数据:JSON.stringify(object)您能提供一个工作示例吗?这只会生成415I-trued-console.log(json),并生成url编码的内容:imageUrl=…&标记=。。。这是迄今为止唯一有效的方法。尽管我认为像JSON这样发送序列化表单这样简单的事情不需要太多的锅炉板代码
    var imagedataUrl = $("#imageUrl").val();
    var tagdataUrl = $("#tag").val();

    $.ajax({
    type: "POST",
    url: "<url>",
     dataType: "json",
    data: { imageUrl: imagedataUrl  , tag: tagdataUrl },
    contentType: "application/json; charset=utf-8;",
    crossDomain: true,


    //if received a response from the server
    success: function(response) {
            $("#uploadResponse").append(response);
    },

    });
$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
    if (o[this.name] !== undefined) {
        if (!o[this.name].push) {
            o[this.name] = [o[this.name]];
        }
        o[this.name].push(this.value || '');
    } else {
        o[this.name] = this.value || '';
    }
});
return o;
};

$(function() {
$("#imageUploadForm").submit(function(e) {
e.preventDefault();
});
$('#uploadButton').click(function() {
var jsonText = JSON.stringify($('form').serializeObject());
    $('#result').text(JSON.stringify($('form').serializeObject()));
     $.ajax({
    type: "POST",
    url: "<url>",
    data: jsonText,
    crossDomain: true,
    dataType: "text/plain",

    //if received a response from the server
    success: function(response) {
            $("#uploadResponse").append(response);
    },

    });
});
});


http://jsfiddle.net/sxGtM/7142/
varContentType="application/json; charset=utf-8";

$.ajax({
    type: varType, //GET or POST or PUT or DELETE verb
    url: varUrl, // Location of the service 
    data: varData, //Data sent to server
    contentType: varContentType, // content type sent to server
    dataType: varDataType, //Expected data format from server
    processData: false,
    crossDomain: true,
});