我遇到一些奇怪的问题,从jquery Ajax调用返回的数据是我无法弄清楚的。
我有一个c#asp.net网页,它在页面加载时使用客户端JavaScript将有效的JSON数据blob绑定到UI。这部分工作正常。我设置了一个jquery Ajax post back,它返回相同的数据并调用相同的JavaScript数据绑定方法,当我尝试绑定数据时会抛出一个错误。看起来写入加载页面的JSON被正确视为JSON对象,但是ajax调用返回的数据不是。
这是ajax调用:
jQuery.ajax({
type: 'POST',
data: "{'move_list': '1-2,3-2'}",
dataType: 'json',
contentType: 'application/json; charset=UTF-8',
url: 'Puzzle.aspx/ProcessMove',
complete: OnComplete,
success: function(data){BindData(data);},
error: OnError
});
以下是正在处理的JSON数据示例:
{"game": [{"x":0,"y":0,"color":"Blue"},{"x":1,"y":0,"color":"Green"}]}
以下是首次加载页面时加载数据的代码:
<script type="text/javascript">
// method returns JSON object above.
// client side code appears like this:
// BindData({"game": [{"x":0,"y":0,"color":"Blue"},{"x":1,"y":0,"color":"Green"}]});
BindData(<%=Game.SerializeToJson()%>);
</script>
最后,JavaScript绑定函数:
function BindData(data)
{
try
{
document.getElementById("square1").className = data.game[0].color;
// much more of the same....
}
catch(exception)
{
alert(exception.message);
// error thrown here is 'data.game is undefined'.
// the data object is being treated like a string and not a JSON object.
// so the indexing into the object fails.
}
}
我已经使用多个在线JSON解析器仔细检查了JSON数据,并且数据格式正确。在任何一种情况下,服务器端代码都会生成相同的输出。
我尝试将jquery Ajax调用更改为...
success: function(data){BindData(JSON.parse(data));},
...看看它是否只是将返回的数据视为字符串而不是JSON对象,但这只是生成此消息:
SyntaxError: JSON.parse: unexpected character
BindData(JSON.parse(data));
完全被这一个难倒。我一直在阅读我能找到的所有东西并尝试各种各样的东西,但似乎没有任何效果。