Javascript JQuery以正确的格式将html表单转换为JSON
我是JQuery的初学者,我正在尝试做一件非常简单的事情:获取一个html表单,将其转换为JSON,将其发送到我的API并显示结果 我读了多篇关于将表单和数组序列化为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
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,
});