2013-05-15 13 views
6

próbuję uzyskać odpowiedź jsonp wykonywana przy użyciu następującego kodu ...JSON_CALLBACK Nie znaleziono użyciu jsonp

$http.jsonp('http://example.com:8888/?callback=JSON_CALLBACK').success(function(response) 
{ 
    console.dir(response); 
}); 

http://example.com:8888/?callback=JSON_CALLBACK zwraca następujący poprzez node.js

JSON_CALLBACK ({date: "2013-05-15 T08: 53: 51.747Z"});

Nagłówek jest ustawiany w node.js jak to ....

res.writeHead(200, {'Content-Type': 'application/json'}); 

jednak błąd pojawia się w konsoli Chrome jest to ...

Uncaught ReferenceError: JSON_CALLBACK is not defined 

jednak , dziwnie, jeśli utworzę funkcję window.JSON_CALLBACK(response) uruchomi się. Ale myślałem, że sukces ma na celu zrobienie tego w moim imieniu.

Odpowiedz

2

Twój nagłówek treści jest nieprawidłowy.

Użyj application/json, jeśli to, co zwrócisz, jest zwykłym JSON. JSONP jest JavaScript, więc należy użyć application/javascript

+0

Dziękuję za odpowiedź, ale spróbowałem. Miałem ten sam błąd –

+0

Ja też @tomwrong. Zauważyłem, że ma to związek z nazewnictwem pliku. Próbowałem zmienić nazwę mojego api (plik php) i lub zmienić JSON_CALLBACK na angular.callbacks._0 w pliku php. Myślę, że to błąd kanciastego. –

+0

Myślę, że to nie jest błąd, uważam, że oferuje więcej niż jedno wywołanie zwrotne – blamb

0

Znalazłem ten siekać i to jest praca dla mnie

 
    //.........................ini: Hack 
    /* 
     Copy-Paste this code just before your $http request. 
    */  
     var c = $window.angular.callbacks.counter.toString(36); 

     $window['angularcallbacks_' + c] = function (data) { 
      $window.angular.callbacks['_' + c](data); 
      delete $window['angularcallbacks_' + c]; 
     };  
    //.........................end: Hack 

    //Your $http request 
    $http.jsonp(url) 
    .success(function(){ 
     console.log("ok") 
    }) 
    .error(function(data, status, headers, config){ 
     console.error("ko"); 
    }); 
0

Oto szybki i brudny roztwór. Zamiast wyprowadzania JSON_CALLBACK({ date:'2013-05-15T08:53:51.747Z' }), możesz wypróbować wyjście angular.callbacks._0({ date:'2013-05-15T08:53:51.747Z' }). Wierzę, że to błąd w Angular.

Alternatywą jest do żądania adresu URL w ten sposób:

$http({ 
    method: 'JSONP', 
    url: 'https://something.com/' + '?callback=JSON_CALLBACK' + '&otherstuffs' 
}); 

PS. Jeśli korzystasz z zaplecza php, zauważyłem, że zmiana nazwy pliku php czasami będzie miała pozytywny wynik (np. Zamiast używać index.php możemy wypróbować api.php). Chociaż wydaje się, że jest całkowicie przypadkowa (jak działa nazwa i vice versa) - myślę, że ma to związek z tym, w jaki sposób Angular odczytuje adres URL jsona.

Wygląda na to, że przyczyną tego niefortunnego błędu jest to, że Angular zastąpi JSON_CALLBACK na angular.callbacks._0, ale czasami zawiedzie z powodu tłumacza URL.

Ponadto, nawet jeśli serwer się powiódł, może nie obsługiwać adresu URL w postaci adresu URL (co jest typowym zachowaniem serwerów).