jQuery Ajax 请求变成 AngularJS $http 请求

jQuery Ajax request turn into AngularJS $http request

我有这样的jQueryAjax请求。我需要把它变成一个 AngularJS $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");
    });

我的Angular实现

响应{"data":“”,"status":“200”,"config":....}数据为空

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

我在下一个请求中成功获取了包裹在 JSON_CALLBACK 中的数据。但我不知道如何调用该回调。它不是自动完成的。响应看起来像 {data:"JSON_CALLBACK({mydata})"...}

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

  return $http.post(url);
},

请参考$http文档。但这里有点对应 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
  });

不存在 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.

可能与此有关??

你API在做什么工作?