2013-05-15 1 views
6

を使用していない私はがJSON_CALLBACK JSONP

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

http://example.com:8888/?callback=JSON_CALLBACK ... JSONP応答は次のコードを使用して作業を取得しようとしていますNode.jsの

JSON_CALLBACK({日付を経由して次の値を返します。 '2013-05-15T08:53:51.747Z'});

ヘッダが

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

しかし、私はクロームコンソールの取得エラーがこれです....このようなNode.jsの中に設定されている...

Uncaught ReferenceError: JSON_CALLBACK is not defined 

しかし、 、奇妙なことに、私が関数window.JSON_CALLBACK(response)を作成すると実行されます。しかし、私は成功は私のためにそれをすることを意味していると思った。

答えて

2

コンテンツタイプヘッダーが正しくありません。

返したものがプレーンなJSONの場合は、application/jsonを使用してください。あなたはapplication/javascript

+0

ありがとうございましたが、私はそれを試しました。私も同じエラーがあった –

+0

私も@tomwrong。私はそれがファイルの命名と関係があることに気づいた。私は自分のapi(phpファイル)の名前を変更したり、PHPファイルのangular.callbacks._0にJSON_CALLBACKを変更しようとしました。私はこれが角のバグだと思う。 –

+0

私はそれがバグではないと思います、私はそれが複数のコールバックを提供すると思います – blamb

0

私はこのハックを発見し、それはここで私

 
    //.........................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

のための仕事だ迅速で、汚れた溶液。 JSON_CALLBACK({ date:'2013-05-15T08:53:51.747Z' })を出力する代わりに、angular.callbacks._0({ date:'2013-05-15T08:53:51.747Z' })を出力できます。私はこれがAngularのバグであると信じています。

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

PS:

代替は、あなたのURLをこのように要求することです。 PHPのバックエンドを使用している場合、私はphpファイルの名前を変更することが肯定的な結果をもたらすことに気付きました(index.phpを使用する代わりに、api.phpを試すことができます)。それは完全に無作為であるように見えますが(その名前は機能し、逆も同様です)、これはAngularがjsonのURLを読み取る方法と関係があると思います。

この不都合なバグの理由は、AngularがJSON_CALLBACKangular.callbacks._0に置き換えますが、URLインタープリタのために時々失敗するということです。

さらに、使用しているサーバーで成功した場合でも、URLに?callback=angular.callbacks._0(サーバー間で共通の動作)がサポートされていない可能性があります。