我是JQuery的初学者,我正在尝试做一个非常简单的事情:获取一个html表单,将其转换为JSON,将其发送到我的API并显示结果。
我阅读了多篇关于将表单和数组序列化为JSON的帖子,但我无法使其工作(我得到400 - Bad Request
响应,因为我的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>
处理请求的脚本:
$(document).ready(function() {
//Stops the submit request
$("#imageUploadForm").submit(function(e) {
e.preventDefault();
});
//checks for the button click event
$("#uploadButton").click(function(e) {
//get the form data and then serialize that
var json = JSON.parse(JSON.stringify(jQuery('#imageUploadForm').serializeArray()));
$.ajax({
type: "POST",
url: "<url>",
data: json,
crossDomain: true,
dataType: "text/plain",
//if received a response from the server
success: function(response) {
$("#uploadResponse").append(response);
},
});
});
});
有人能指出我正确的方向吗?目标是将以下JSON发送到api:
{
"imageUrl" : "...",
"tag" : "..."
}
答案 0 :(得分:2)
您可以查看以下代码和小提琴链接,
$.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/
希望它可以帮到你。
答案 1 :(得分:0)
您不必解析字符串化的JSON,否则您将发送JS对象。你必须发送一个字符串来表示JSON。
var json = JSON.stringify(jQuery('#imageUploadForm').serializeArray());
答案 2 :(得分:0)
尝试将内容类型更改为contentType: "application/json; charset=utf-8",
,如果您的api正在返回json set dataType: "json"
。
您的控制台报告是什么?如果有的话?
答案 3 :(得分:0)
只需使用var json=$('#imageUploadForm').serialize()
根据您的相关表单,您不需要serializeArray
并更改内容类型contentType:"application/json; charset=utf-8",
检查此SO link
答案 4 :(得分:0)
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);
},
});
答案 5 :(得分:-1)
您应该提及发送到服务器的内容类型
{{ user.profile.avg_rating }}