所以我有这个代码:
var ajaxUrl = 'a/7776/as';
var data = {
'answer' : { 'user_input' : [] },
'form_build_id' : 'form-ffe6f10e9601470ed4cfe38257a959a6'
}
$.ajax({
url: ajaxUrl,
dataType: 'json',
type: 'POST',
data: data,
success: function(json){
}
});
然而,当我检查 POST 源时,似乎没有发送“答案”。
这是 Firebug 中的 POST 源代码:
Parametersapplication/x-www-form-urlencoded
form_build_id form-ffe6f10e9601470ed4cfe38257a959a6
Source
form_build_id=form-ffe6f10e9601470ed4cfe38257a959a6
为什么会出现这种情况?如何才能将对象的“答案”部分发送到 AJAX 帖子中?
默认POST
编码是multipart/form-data http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2,它由一系列扁平的name=value
pairs.
您的结构不能直接映射到平面系列name=value
成对,因为它很复杂。您有一个对象成员,它有一个引用数组的属性。
如果要发送任意复杂的结构,则必须使用不同的编码并确保服务器理解该编码。例如,你can将 JSON 或 XML 发送到服务器,但您必须通过设置来告诉它这就是您正在做的contentType
财产在ajax
方法(设置您发送的数据的类型to服务器)。然后您的服务器必须了解如何反序列化该 JSON 或 XML。
或者,确保您的结构可以映射到一系列平面name=value
pairs.
中途之家是将数据发送为multipart/form-data
,但是您发送单个name=value
配对并拥有value
部分是不同的编码,如下所示:
$.ajax({
url: ajaxUrl,
dataType: 'json',
type: 'POST',
data: {json: JSON.stringify(data)},
success: function(json){
}
});
这会发送一个name=value
与名字配对json
,其中值是 JSON 编码的字符串。您的服务器端将检索json
以正常方式参数,然后使用 JSON 反序列化器重新创建对象图。
这种中间方法有时在框架中很方便,因为这些框架很难使用标准请求编码之外的其他内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)