在Internet Explorer中,jQuery ajax请求响应为空

时间:2011-01-04 15:08:36

标签: asp.net jquery ajax

我正在进行以下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

有什么想法吗?

2 个答案:

答案 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对象的方法都有。