Aber der Erfolgs-Callback wird nie aufgerufen, stattdessen erzeugt der Fehler-Callback diese Ausgabe:
jQuery15109935275333671539_1300495251986 was not called
parsererror
Warum passiert das?
Ich verwende keine zusätzlichen Bibliotheken zu jQuery.
BEARBEITEN:
Wenn ich versuche, den Ajax-Aufruf mit “json” als dataType anstelle von “jsonp” durchzuführen, antwortet der Server mit einem leeren String.
Evan Trimboli
JSONP erfordert, dass die Antwort in eine Art Callback-Funktion verpackt wird, da es funktioniert, indem es ein Skript-Tag in das Dokument einfügt, um Daten aus einer anderen Domäne zu laden.
Im Wesentlichen wird ein Skript-Tag wie folgt dynamisch in das Dokument eingefügt:
callback von der Ressource abhängt, die Sie aufrufen, ist es üblich, dass der Parameter lautet callback obwohl.
someFn wird dann verwendet, um die vom Server zurückgegebenen Daten zu verarbeiten, daher sollte der Server antworten mit:
someFn({theData: 'here'});
Das someFn wird als Teil der Anfrage übergeben, daher muss der Server es lesen und die Daten entsprechend umschließen.
Dies alles setzt voraus, dass Sie den Inhalt von einer anderen Domain abrufen. Wenn dies der Fall ist, sind Sie durch dieselbe Ursprungsrichtlinie eingeschränkt: http://en.wikipedia.org/wiki/Same_origin_policy
Die fragliche API ist eine öffentliche API eines Anbieters. Es beschränkt die Aufrufe nur auf jsonp. Jsonp-Aufrufe werden beantwortet, aber als normales Json-Objekt.
– Thomas
19. März 11 um 12:44 Uhr
In diesem Beispiel ist someFn der Callback und der Server sollte antworten mit: jQuery15109935275333671539_1300495251986({…});
– Adam Morris
24. März 11 um 15:29 Uhr
Gott sei Dank, ich wünschte, sie würden eine verdammte Dokumentation hinzufügen
– Kevin
19. November 13 um 21:55 Uhr
Ich kann diesen nicht verstehen. Sie meinen, ich muss die Antwort vom Server umschließen, zB mit: $callBack({$myJsonResult}); Ich werde das auf der Serverseite tun?
– PinoyStackOverflower
20. Mai ’14 um 8:15 Uhr
@AdamMorris Woher soll der Server die Funktion kennen? Ich meine diese lange Zahl in jQuery15109935275333671539_1300495251986 ? Wie geben Sie diese Informationen an den Server weiter?
– StallingOne
20. Juni 18 um 9:17 Uhr
Bryan
Nach dem Upgrade auf Jquery 1.5 und dem Versuch, einen Anruf über Domänen hinweg zu tätigen, hatte ich das gleiche Problem. Schließlich fand ich, dass $.getJSON funktionierte. Speziell,
In dem Server, der auf einem anderen Server läuft und ich die Kontrolle habe, wurde dieser Code hinzugefügt:
PrintWriter writer = response.getWriter();
String jsonString = json.toString(JSON_SPACING);
String callback = request.getParameter("jsoncallback");
// if callback in URL and is not just the "?" (e.g. from localhost)
if (callback != null && callback.length() > 1)
{
writer.write(callback + "(" + jsonString + ");");
}
else
{
writer.write(jsonString);
}
(Das json-Objekt ist eine Instanz von JSONObject, den Code finden Sie hier http://www.json.org/java/)
Rohit
Wenn Sie jsonp als Datentyp verwenden (domänenübergreifende Anfrage stellen), generiert Jquery eine zufällige Funktion und fügt an die angeforderte URL als Abfragezeichenfolge mit dem Namen Callback (callback=?) an, müssen Sie die JSON-Antwortdaten als Parameter dieser Funktion wie unten angegeben anhängen –
url : http://www.dotnetbull.com/cross-domain-call.ashx?ref=jquery-jsonp-request
url call by ajax :
http://www.dotnetbull.com/cross-domain-call.ashx?ref=jquery-jsonp-request&callback=jQuery1510993527567155793_137593181353
Du solltest wirklich nicht angeben jsonp Hier. Benutz einfach json weil Sie gerade eine JSON-Zeichenfolge erhalten. json (json with padding) erwartet die Ausführung einer Javascript-Funktion. In diesem Fall müssen Sie in Ihrem Abfragestring ein “callback=” angeben. Ich denke, das ist der Grund, warum jQuery das auch nicht verarbeiten kann, es gibt eine Eigenschaft mit dem Namen Callback.
Ich bekomme einen leeren String als Antwort, wenn ich nur json für die Anfrage verwende. Kann es sein, dass die API kaputt ist? Und wenn ja, gibt es eine Möglichkeit, dies in js zu hacken?
– Thomas
19. März 11 um 1:20 Uhr
du meinst “jsonp (json with padding)”, nicht “json (json with padding)”
– Bär
27. März 13 um 13:49 Uhr
Adam
Versuchen Sie, die Antwort mit $.parseJSON in ein Objekt einzulesen:
success: function(data) {
var json = $.parseJSON(data);
}
Ich bekomme einen leeren String als Antwort, wenn ich nur json für die Anfrage verwende. Kann es sein, dass die API kaputt ist? Und wenn ja, gibt es eine Möglichkeit, dies in js zu hacken?
– Thomas
19. März 11 um 1:20 Uhr
du meinst “jsonp (json with padding)”, nicht “json (json with padding)”
– Bär
27. März 13 um 13:49 Uhr
Wilhelm
Stellen Sie sicher, dass der aufgerufene Dienst Daten im JsonP-Format zurückgeben kann.
Wenn Sie asp.net webapi verwenden, können Sie WebApiContrib.Formatting.Jsonp verwenden, es ist Open Source.
Stellen Sie sicher, dass Sie eine Zeile wie unten in WebApiConfig.Register haben.
config.Formatters.Insert(0, new JsonpMediaTypeFormatter(new JsonMediaTypeFormatter(), “callback”));
Ich habe meine Haare darüber gezogen. Hoffe, das hilft jemandem.
.
7679900cookie-checkParserfehler nach jQuery.ajax-Anfrage mit jsonp-Inhaltstypyes