我正在进行以下ajax调用:
//exif loader
function LoadExif(cImage) {
$.ajax({
type: "POST",
url: "http://localhost:62414/Default1.aspx/GetImageExif",
data: "{iCurrentImage:" + cImage + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
error: ajaxFailed,
success: function (data, status) {
var sStr = '';
for (var count in data.d) {
sStr = sStr + data.d[count];
};
alert(sStr);
}
});
};
在Firefox中,请求工作正常。当我尝试在Internet Explorer中运行代码时,响应为空。
以下是webmethod女巫的名字:
<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
Public Shared Function GetImageExif(ByVal iCurrentImage As Integer) As String
Dim sbTable As New StringBuilder
sbTable.AppendLine("<table>")
sbTable.AppendLine("<tr>")
sbTable.AppendLine("<td>Name</td><td>" & gGallery.Images(iCurrentImage).File.Name & "</td>")
sbTable.AppendLine("</tr>")
sbTable.AppendLine("</table>")
Return sbTable.ToString
End Function
有什么想法吗?
扬
答案 0 :(得分:1)
当你有警报(数据)时;你看到了什么?
感谢您的提示。这就是问题所在。我从我的另一个项目中复制了代码。
alert(data.d);
...适用于两种浏览器。谢谢您的快速回答。
扬
答案 1 :(得分:1)
从ASP.NET 3.5开始,MS引入了一个安全功能,它将任何JSON响应封装在父对象(“d”)中。
这样做有助于抵御XSS漏洞(此处描述:http://haacked.com/archive/2009/06/25/json-hijacking.aspx)
这就是它存在的原因。
以下是如何处理它,如果您针对多个版本的ASP.NET进行编码,您可以在成功函数中使用以下检查来检测它的存在:
if (data.hasOwnProperty('d'))
//use data.d in your code;
else
//use data in your code
至于为什么Firefox会适当地处理它而IE8没有处理它,我会假设每个解析JSON对象的方法都有。