2016-08-21 9 views
0

私はそのようなjQuery Ajaxリクエストを持っています。 Angular $ httpリクエストに変換する必要があります。どうやってやるの?

$.ajax({ 
     type: "POST", 
     dataType: "jsonp", 
     crossDomain: false, 
     data:{ 
      user: username, 
      pass: password 
     }, 
     beforeSend: function (request){ 
      request.setRequestHeader("Accept-Language", languageCode); 
     }, 
     url: someUrl 
    }) 
    .done(function (data, textStatus, jqXHR){ 
     console.log(data); 
    }) 
    .fail(function (jqXHR, textStatus){ 
     console.log("failed"); 
    }); 

マイ角度実装

{ "データ": ""、 "ステータス": "200"、 "設定":....}

応答データが空

login : function (username, password) { 
    return $http({ 
    method: 'POST', 
    url: someUrl, 
    data: { 
     user: username, 
     pass: password 
    }, 
    headers: { 
     'Accept-Language': languageCode 
    } 
    }) 
} 

次のリクエストでJSON_CALLBACKでラップされたデータを取得することに成功しました。しかし、私はそのコールバックを呼び出す方法を知らない。自動的には行われません。 $httpドキュメントを参照してください:{... "JSON_CALLBACK({} MYDATA)" データ}

login : function (username, password) { 
    var url = someUrl 
    + '?callback=JSON_CALLBACK&user=' + username 
    + '&pass=' + password; 

    return $http.post(url); 
}, 
+0

Easy:$ httpサービス。 – dfsq

+0

はい、$ httpサービスを試しましたが、私はさまざまなバリエーションを試しました。 $ http.get/$ http.postリクエストを使用して応答を得るのに何回か成功しましたが、JSON_CALLBACKでラップされました。そのコールバックからデータを取得するにはどうすればよいですか? .success .errorから到達できません。 上記のリクエストの実装は私のものではありません。角度を使って同じことをするだけです。 –

+0

$ httpサービスを使用してJSONPリクエストを行います。 – dfsq

答えて

0

JSONP POSTリクエストのようなものはありません。 jQueryがdataType: jsonpを見ると、methodプロパティが無視され、スクリプトのGET要求が使用されます。データはURLのパラメータとして追加されます。

AngularJSでは、JSONPリクエストはmethod: 'JSONPで指定されます。コールバックパラメータはJSON_CALLBACKである必要があり、大文字にする必要があります。

login : function (username, password) { 
    return $http({ 
    //method: 'POST', 
    method: 'JSONP', 
    url: someUrl, 
    //data: { 
    params: { 
     user: username, 
     pass: password, 
     callback: "JSON_CALLBACK" 
    }, 
    headers: { 
     'Accept-Language': languageCode 
    } 
    }) 
} 

データはURLパラメータとして送信されるため、パスワードなどの機密情報は盗聴攻撃に対して脆弱であることに注意してください。 JSFiddleに実証するために


var url="//jsfiddle.net/echo/jsonp/"; 
var params = { user: "myUser", 
       pass: "123456", 
       callback: "JSON_CALLBACK" 
      }; 
$http.jsonp(url, { params: params}) 
    .then(function onSuccess(response) { 
     $scope.response = response; 
     console.log(response); 
    }) 

DEMO on JSFiddle

0

を応答は次のようになります。このjqueryリクエストには幾分相応しています。

$http({ 
    method: 'POST', 
    url: '/someUrl', 
    data: { 
     user: username, 
     pass: password 
    }, 
    headers: { 
    'Accept-Language':languageCode 
    } 
}).then(function successCallback(response) { 
    //do something 
    }, function errorCallback(response) { 
    //do something 
    }); 
+0

私はこの種のリクエストを試みましたが、応答は成功しましたが、その中のデータは空です(データ: "")。 jsonpリクエストに次のパラメータを追加すると: "&callback = JSON_CALLBACK"このコールバックにラップされたデータが得られます。 レスポンス:{data: "JSON_CALLBACK(ここにデータが必要です)"、..} –

+0

OKこのパラメータに 'responseType: 'json''を追加してみてください。それでも – Miqe

+0

と同じ結果が出ます: –

関連する問題