" JSON解析以意外字符结束"在JSON.stingify值上使用DeserializeJSON时

时间:2014-06-18 17:32:05

标签: jquery json coldfusion-10

我的应用程序包含多个<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字符串进行反序列化。我可以在客户端做一些事情来解决这个问题,还是我需要完全依赖服务器端修复?

1 个答案:

答案 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(在客户端代码和处理它的服务器代码中)。