2012-11-23 17 views
6

jQuery:jQuery AJAX-Status "200 OK", aber keine Daten Antwort

$.ajax({ 
url : url, 
type : 'GET', 
dataType: 'json', 
data: { 
    'FN' : 'GetPages', 
    'PIN' : '7659' 
}, 
xhrFields: { 
    withCredentials: true 
}, 
crossDomain: true, 
success: function(data) { 
    alert('succsess'); 
    console.log('data', data); 
}, 
error: function (xhr, ajaxOptions, thrownError) { 
    alert('error'); 
    console.log(xhr.status); 
    console.log(thrownError); 
} 
}); 

Firebug Firefox Netzwerk

Firebug Error http://s14.directupload.net/images/121123/8ar5vljg.png

Was

Die AJAX geschieht "error:" Ereignis wird t riggered und meine console.log Ausgänge sind:

xhr.status -> 0

thrownError -> (empty String)

ist das normal? Wenn ich die URL in einem Browser eintippe, erhalte ich einen Datei-Download mit dem JSON-Inhalt darin, das sollte kein Problem sein, oder?

+0

Über eine Browser-URL lautet die Antwort: [{"pg": 0, "descr": "PC1"}, {"pg": 1, "descr": "PC2"}, {" pg ": 2," descr ":" PC3 "}, {" pg ": 3," descr ":" HG1 "}, {" pg ": 4," descr ":" HG2 "}, {" pg " : 5, "descr": "HG3"}, {"pg": 6, "descr": "HG4"}, {"pg": 7, "descr": "DW1"}, {"pg": 8 , "descr": "DW2"}, {"pg": 9, "descr": "CMN"}] – user1841515

+0

Auch mein Verständnis ist, dass ** jsonp ** nicht funktionieren wird, denn ich darf nichts ändern Der Server und seine Antwort bleibt im JSON-Format und nicht im JSONP-Format – user1841515

+0

Jsonp wird nicht auf den Server auswirken. Aber es kann helfen, CORS-Probleme zu umgehen. Es kann Ihre einzige Option sein, ohne den Server zu ändern – JonWells

Antwort

10

Dank @CrimsonChin weiß ich, es ist ein Same Origin Policy Problem

In computing, the same origin policy is an important security concept for a number of browser-side programming languages, such as JavaScript. The policy permits scripts running on pages originating from the same site to access each other's methods and properties with no specific restrictions, but prevents access to most methods and properties across pages on different sites.[1]

(von http://en.wikipedia.org/wiki/Same_origin_policy)

Erteilen JavaScript Kunden grundlegenden Zugriff auf Ihre Ressourcen erfordert lediglich eine HTTP-Response-Header hinzugefügt, :

Access-Control-Allow-Origin: * 
Access-Control-Allow-Origin: http://foo.example.com 

(von http://enable-cors.org/)

Ofc, würde die JSON-Antwort in eine JSONP Antwort würde auch funktionieren. Thx @djakapm

2

Ich kann nicht aus dem Bild herausgefunden, aber wenn Sie AJAX Anfrage an eine andere Domain senden versuchen, müssen Sie JSONP, einfache AJAX-Request ausreichend

Versuchen zu ändern sein wird, nicht dataType: 'json'-dataType: 'jsonp' verwenden

und fügen callback=? zu Ihrem URL

+0

Ok, ich habe es ausprobiert und folgende Fehlermeldung erhalten: \t Syntax Fehler descr ":" DW1 "}, {" pg ": 8," descr ":" DW2 "}, {" pg ": 9, "descr": "CMN"}] – user1841515

+0

Und Fehler: jQuery172046435253250156217_1353659110552 wurde nicht aufgerufen – user1841515

+0

Haben Sie die Kontrolle über die Serverantwort? In PHP gebe ich normalerweise Antwort wie folgt: $ _GET ['Callback']. '()'. Es wird eine JavaScript-Funktion Anruf – djakapm

3

Versuchen Sie dieses

nämlich
+0

zu ermöglichen. Ich habe diesen Code ausgeführt und folgende Warnmeldung erhalten: { "Readystate": 4, "status": 200, "status": "Erfolg"} Und in Firebug-Konsole einen Fehler: Syntaxerror: ungültiges Zeichen im ** ** json Antwort "descr" : "CMN"}] <- und ein Pfeil, der auf den Questionmark zeigt, der nicht da sein sollte !? – user1841515

+0

@ user1841515 versuchen, die service_data durch json lint (http://jsonlint.com/) zu laufen, um sicherzustellen, dass der Json gut formatiert ist – JonWells

+0

@CrimsonChin Ich kopierte die JSON und führen Sie eine Prüfung -> Valid JSON – user1841515

Verwandte Themen