我正在尝试$ .ajax而不是getJSON用于调试目的。因为getJSON没有报告IE中的错误(6,7或8),我试图弄清楚为什么jQuery插件不会将我返回的图像绘制到IE中的屏幕上,而是在其他浏览器中。
所以我尝试了这个。有趣的是,它击中了IE中的错误事件而不是firefox,safari和其他人,我不知道为什么(这段代码效果很好,并且在FireFox中提供我的数据就好了)。我知道我退回的json是有效的:
$.ajax({
type: "GET",
url: "http://localhost:59396/sss/sssHandler.ashx?action=getproducts&ids=" + ids,
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
alert(data.length);
carousel.size(allProductIDs.length);
if (numberOfImagesLeftToShow < numberOfImagesToDisplay) {
first += (numberOfImagesToDisplay - numberOfImagesLeftToShow);
}
var d = 0;
for (var i = first; i <= last; i++) {
if (d != undefined) {
// add data using index of the array returned by JSON (which starts at 0)
carousel.add(i, decode(data[d].ImageTag));
}
// set to last ProductID showing in Carousel
if (i == last) { lastProductID = parseFloat(data[d].ProductID); }
d++;
}
},
error: function() {
alert("An error has occurred. Please try again.");
}
});
我不知道还有什么办法可以解决为什么IE使用返回的JSON遇到这么多麻烦,或者只是使用getJSON或者执行函数(数据)。我在响应中也设置了标头而不是缓存。那不是问题。 问题无论出于何种原因,IE拒绝在响应中输入我的功能(数据)。
这是返回的JSON,显示有效(甚至用http://www.jsonlint.com/检查):
[
{
"ImageTag": "\u003cdiv class=\"CarouselItem
\"\u003e<p><img src="http://www.xxx.com/image/
2568.jpg" alt=""></p>\u003cp\u003e\u003ca href=
\"Bear-10.prod\"\u003eTeddy Bear\u003c/a\u003e\u003c/p\u003e\u003cp
\u003e$20.95\u003c/p\u003e\u003cdiv\u003e",
"ProductID": "540"
},
{
"ImageTag": "\u003cdiv class=\"CarouselItem
\"\u003e<p><img src="http://www.xxx.com/image/
50.jpg" alt=""></p>\u003cp\u003e\u003ca href=
\"Pendant362.prod\"\u003eBirthday\u003csup\u003e©\u003c/sup
\u003Necklace\u003c/a\u003e\u003c/p\u003e\u003cp\u003e$36.95\u003c/p
\u003e\u003cdiv\u003e",
"ProductID": "83"
}
]
在我的.ashx中,我只需要以下主代码来生成响应
context.Response.ContentType = "application/json";
context.Response.Charset = Encoding.UTF8.ToString();
context.Response.Cache.SetNoStore();
context.Response.Cache.SetExpires(DateTime.MinValue);
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetValidUntilExpires(false);
context.Response.Expires = -1;
context.Response.ExpiresAbsolute = DateTime.MinValue;
context.Response.AddHeader("Cache-Control", "no-cache");
context.Response.AddHeader("Cache-Control", "post-check=0, pre-check=0");
context.Response.AddHeader("Pragma", "no-cache");
...
string jsonString = imageList.ToJSON(); <-- uses the .NET 3.5 JavaScriptSerializer
context.Response.Write(jsonString);
另外,如果您将response.ContentType指定为“application / json”或“text / plain”似乎并不重要,因为至少我在FireFox中获取有效数据并进行了解析。
答案 0 :(得分:1)
我怀疑这是json数据,让我们首先尝试回家问题。如果你简单地回来,请求是否有效?
[
{
"ImageTag": "imagePath",
"ProductID": "540"
},
{
"ImageTag": "imagePath",
"ProductID": "83"
}
]
如果确实如此,即对某些编码有困难。
N.B我也尝试过你在jsonlint上粘贴的json,除非我在第二张图片中删除了imageTag的最后一行,否则无法验证它。
你真的需要在json中返回html。如果是这样,为什么不只是做一个html得到你没有真正受益于轻量级的json结构
答案 1 :(得分:1)
不确定这是否与问题有关,但 contentType 参数指定发送的数据的MIME类型,但未收到。
由于您没有发送任何内容(仅使用已在URL中指定的查询字符串进行GET),您可能不需要选项中的contentType
或data
参数。
答案 2 :(得分:0)
我认为jQuery使用eval(“(”+ data +“)”),然后将结果传递给您的success函数,因为您已经指定了您期望的JSON数据。可能值得将此内容类型更改为“text”,然后在成功回调中使用JSON.parse来解析它。只是一个想法!
答案 3 :(得分:0)
修好了,
删除:
context.Response.Charset = Encoding.UTF8.ToString();
改变: context.Response.ContentType =“application / json; charset = utf-8”;