2012-04-23 14 views
10

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!

+1

Jaka jest odpowiedź serwera? Możesz go znaleźć w narzędziach develeopers takich jak Dragonfly (opera), Firebug (FireFox), Developer Tools (Chrome) –

+0

url: "http://example.com/api/service?callback=blah"! = Twoja nazwa funkcji bleh(). Czy to może być literówka? – mayrs

+0

@BartoszGrzybowski Status odpowiedzi serwera to 200 OK – Limescale

Odpowiedz

4

zdefiniować funkcję oddzwonienia-poprzez jsonpCallback -Opcja, nie wewnątrz URL:

function doJsonp() 
{ 
    $.ajax({ 
     url: "http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=?", 
     dataType: "jsonp", 
     crossDomain: true, 
     jsonpCallback:'blah',//<<< 
     success: function() { console.log("success"); }, 
     error: function() { console.log("error"); } 
    }); 
}