我试图创建一个HTML页面,可以将表单数据以JSON的形式提交给服务器。我咨询了答案this question和我使用下面的代码来做到这一点:作为JSON发送表单数据 - 浏览器更改内容类型
<head>
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="http://www.json.org/json2.js"></script>
<script type="text/javascript">
$(function() {
var frm = $(document.myform);
var dat = JSON.stringify(frm.serializeArray());
alert("I am about to POST this:\n\n" + dat);
$.ajax({
type: "POST",
data: dat,
success: function(){},
dataType: "json",
contentType : "application/json"
});
});
</script>
</head>
<body onload="javascript:document.myform.submit()">
<form action="http://www.foo.com/" method="post" name="myform">
<input name="firstName" value="harry" />
<input name="lastName" value="tester" />
<input name="toEmail" value="[email protected]" />
</form>
不过,如果我使用打嗝代理工具拦截请求,我可以看到,由于某些原因,在Content-Type成为application/x-www-form-urlencoded
为一旦请求离开浏览器。这里的请求的截图:
我想知道为什么会出现这种情况与要求?为什么浏览器在请求中改变Content-Type?有一个更好的方法吗? PS:我试过没有jQuery(使用XHR,如解释here)。
我看到我的代码的问题。但是,我仍然无法发出POST请求,因为浏览器禁止跨域请求。 –
没错,你可以用jsonp搞定,但是你需要修改服务器端代码,以使 – user1572796