Używam metody jQuery do pobrania $.ajax
z usługi WWW zgodnej z JSONP i jeśli chodzi o uzyskanie odpowiedzi i wyświetlenie otrzymanych danych w moim HTML, wszystko wydaje się działać dobrze. Jednak nie byłem w stanie uzyskać wywołania zwrotnego sukcesu metody ajax do uruchomienia. Jeszcze dziwniejsze jest to, że nawet gdy otrzymuję poprawną odpowiedź od usługi, wywołanie zwrotne błędu jest zawsze uruchamiane.jQuery ajax success callback not fireing
Oto przykład prostego funkcji js Zrobiłem to sprawdzić:
function doJsonp()
{
$.ajax({
url: "http://example.com/api/service?callback=blah",
dataType: "jsonp",
crossDomain: true,
success: function() { console.log("success"); }, // This is never fired
error: function() { console.log("error"); } // This is always fired
});
}
i funkcję dopasowywania callback:
function blah(data)
{
console.log(data); // This is called properly
}
Czytając podobne pytania tutaj na SO i gdzie indziej, to wydaje się, że jest to najczęściej spowodowane przez JSON zwracający usługę, który nie jest sprawdzany. Dla moich celów, Używam usługę internetową w domu, ale próbowałem innych usług jsonp jak dobrze, jak te dostarczone przez Flickr, na przykład:
http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=blah
Zarówno JSON z serwisu i kopalni validate Flickr używając jsonlint, więc wydaje mi się, że nie jest to problemem.
Szukając rozwiązania tego problemu, próbowałem użyć wtyczki jQuery o nazwie jquery-jsonp, znalezionej pod adresem http://code.google.com/p/jquery-jsonp/. Zastępuje to jQuery $.ajax
połączenia z własnym $.jsonp
więc powyższy kod wygląda następująco:
function doJsonp()
{
$.jsonp({
url: "http://example.com/api/service?callback=blah",
success: function() { console.log("success"); },
error: function() { console.log("error"); }
});
}
Jednak wynik jest taki sam i zwrotna sukces nigdy nie odpala. Każda pomoc lub posunięcie w dobrym kierunku zostanie docenione!
Jaka jest odpowiedź serwera? Możesz go znaleźć w narzędziach develeopers takich jak Dragonfly (opera), Firebug (FireFox), Developer Tools (Chrome) –
url: "http://example.com/api/service?callback=blah"! = Twoja nazwa funkcji bleh(). Czy to może być literówka? – mayrs
@BartoszGrzybowski Status odpowiedzi serwera to 200 OK – Limescale