目前我正在使用此处列出的辅助方法从我的.ashx返回一些JSON:http://weblogs.asp.net/scottgu/archive/2007/10/01/tip-trick-building-a-tojson-extension-method-using-net-3-5.aspx
问题是,我得到了[和]缠绕我的JSON,这是错误的...... jQuery无法在回调中找到它:
[{"ImageTag":"<img src="http://www.xxx.com/image/473.jpg" alt="">"},{"ImageTag":"<img src="http://www.xxx.com/image/485.jpg" alt="">"}]
所以我不知道为什么我会围绕这个得到括号。这是我的实施:
private void GetImagesJSON(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Charset = Encoding.UTF8.ToString();
int i = 1;
List<Product> products = GetTestProducts();
List<CtImageList> imageList = new List<CtImageList>();
foreach(Product p in products)
{
string imageTag = HttpUtility.HtmlEncode(string.Format(@"<img src=""{0}"" alt="""">", ImageUrl(p.Image, false)));
imageList.Add(new CtImageList{ImageTag = imageTag});
i++;
}
string jsonString = imageList.ToJSON();
context.Response.Write(jsonString);
}
这是jQuery中的回调函数,因为起始[和]而无法解析它:
function itemLoadCallback(carousel, state) {
// Only load items if they don't already exist
if (carousel.has(carousel.first, carousel.last)) {
return;
}
$.getJSON("http://localhost:59396/xxx/CHandler.ashx?action=productsjson",
function(data) {
$.each(data.items, function(i, item) {
alert('got here');
carousel.add(i, mycarousel_decodeEntities(item.ImageTag));
if (i == 3) return false;
});
});
};
答案 0 :(得分:1)
AFAIK,您的回复是格式良好的JSON。 括号是告诉javascript解析您正在使用数组。 将JSON传递给eval()会返回一个包含2个对象的数组。
如果您的回调正在等待单个“ImageTag”对象,则会出现错误。
答案 1 :(得分:0)
实际上,这应该是有效的json。 “[”和“]”表示列表,因为您在对象列表上调用了ToJSON。所以你必须将结果视为一个数组。看看下面的样本......
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var a = eval("[1,2,3]");
for(var i in a) { $("#results").append("<p>" + a[i] + "</p>"); } });
</script>
<div id="results"></div>
所以对于你的代码,函数是:
var images = eval('[{"ImageTag":"<img src="http://www.xxx.com/image/473.jpg" alt="">"},{"ImageTag":"<img src="http://www.xxx.com/image/485.jpg" alt="">"}]');
for(var i in images){
$("#mydiv").append(images[i].ImageTag);
}