2011-01-04 4 views
2

ich folgende Ajax-Aufruf so mache:jQuery Ajax-Request Antwort ist leer in Internet Explorer

//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);    
     } 
    }); 
}; 

In Firefox die Anfrage wirklich gut funktioniert. Wenn ich versuche, den Code in Internet Explorer auszuführen, ist die Antwort leer.

Hier wird die Webmethod Hexe genannt:

<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 

Irgendwelche Ideen?

Jan

+0

Haben Sie sichergestellt, dass Ihr WebMethod ausgeführt wird, wenn Sie IE verwenden? Das Problem könnte mit dem AJAX-Aufruf sein. Ich erinnere mich an ein Problem mit einer bestimmten Version von jQuery in IE, wo AJAX-Aufrufe unter bestimmten Sicherheitseinstellungen nicht ausgelöst werden. Die genauen Details entgehen mir. – Samo

+0

Ich habe mit genau diesem Problem gekämpft ... leider habe ich keine gute Lösung gefunden, also werde ich diesen Thread sehen :) – Ozzy

+0

Ist das eine Cross-Domain-Anfrage? Wenn ja, müssen Sie in jsonp suchen. Wenn es Cross-Domain ist, werde ich ein Beispiel für Sie ausgraben. – Josh

Antwort

1

Wenn Sie alert (Daten) haben; was siehst du?

Danke für diesen Hinweis. Das war das Problem. Ich habe den Code von einem anderen meiner Projekte kopiert.

alert(data.d); 

... funktioniert in beiden Browsern. Danke für die schnellen Antworten.

Jan

+0

Entschuldigung Jan, nicht sicher, was los ist - kümmern sich um das Wohl der anderen mit einem solchen Problem zu erklären? –

1

Beginnend mit ASP.NET 3.5 MS eingeführt, um eine Sicherheitsfunktion, wo sie jede JSON-Antwort in einem übergeordneten Objekt ("d") einzukapseln.

dies tun hilft gegen eine XSS-Schwachstelle (hier beschrieben: http://haacked.com/archive/2009/06/25/json-hijacking.aspx)

Das ist der Grund, warum es existiert.

Hier ist, wie es zu handhaben, wenn Sie Code gegen mehrere Versionen von ASP.NET, geben Sie einfach die folgende Überprüfung in Ihrem Erfolg Funktion Existenz es ist zu erkennen, verwenden können:

if (data.hasOwnProperty('d')) 
    //use data.d in your code; 
else 
    //use data in your code 

Was, warum Firefox es Griffe entsprechend und IE8 nicht, ich würde annehmen, es hat etwas zu tun, wie jeder das JSON-Objekt analysiert.