我的应用程序包含多个<input type="file">
字段,我需要保存文件路径。我正在将路径转换为JSON字符串并将结果发送到ColdFusion CFC方法。在ColdFusion方面,我使用DeserializeJSON()
反序列化JSON字符串,但是收到错误:
JSON解析以意外字符结尾
将序列化的FORM结构传递到ColdFusion页面时,我遇到了同样的问题。我通过使用URLEncodedFormat()
编码值的URL修复了它。 url编码上面的JSON字符串会解决这个问题,还是我的代码将文件路径作为JSON字符串传递不正确?
我的客户端代码如下:
var lttr_docs = {};
for(i=1;i<length;i++)
{
lttr_docs['file_id_'+i] = $('#file_id_'+i).val();
}
$.ajax({
url: "xyz/component.cfc?method=methodName",
type: "GET",
dataType:"json",
data: JSON.stingify(lttr_docs),
success: function(res) {
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
}
});
基本上问题是在服务器端对JSON字符串进行反序列化。我可以在客户端做一些事情来解决这个问题,还是我需要完全依赖服务器端修复?
答案 0 :(得分:1)
dataType
不是告诉服务器您发送的数据类型,即使data
用于您发送的数据;它只是jQuery API中的一个缺陷。与直觉相反,dataType
用于告诉jQuery您希望返回的数据类型。所以dataType: "json"
可能是错的。相反,您需要contentType: "application/json"
。
因此,您的GET
会以默认的application/x-www-form-urlencoded; charset=UTF-8
内容类型发送到服务器,这可能会让您感到困惑。
另外,正如Rocket Hazmat在下面的评论中指出的那样,在GET
上指定内容类型有点可疑。您可能希望将其更改为POST
(在客户端代码和处理它的服务器代码中)。