【问题标题】:success is not defined in Angular $http.jsonpAngular $http.jsonp 中没有定义成功
【发布时间】:2014-04-22 06:07:03
【问题描述】:

我正在我的 angular/phonegap 应用程序中发出 $http.jsonp 请求。数据已成功传送到远程服务器,但我无法从角度应用程序中的成功函数获得响应。控制台告诉我“未定义成功”。

这是我的角度代码:

app.controller('mainControl' , function($scope , $http){
$scope.credentials = {username: '' , password: ''};

$scope.login = function(){
console.log($scope);

var url = "http://127.0.0.1:3000/endpoint?callback=JSON_CALLBACK";
var responsePromise = $http.jsonp(url, {params: {
  username:$scope.credentials.username,
  password:$scope.credentials.password
}});

responsePromise.success(function (data){
  console.log(data);
})
}

})

我错过了定义成功的步骤吗?

【问题讨论】:

  • 这并不能真正回答您的问题,但请记住 json/p 主要用于解决桌面浏览器中的跨域 xhr 问题。您在 PhoneGap 中没有该块。也许尝试直接请求并跳过 json/p?
  • 据我所知,任何类型的跨域请求都需要 JSONP 或 CORS。我只是尝试在这个应用程序中发送没有 jsonp 的数据,但它没有到达服务器。
  • 桌面 浏览器上需要 JSON/P 或 CORS。 PhoneGap 专门允许您在不使用它的情况下制作 XHR。
  • 任何文档?你说的是白名单吗?看起来这可能允许 phonegap 应用程序从列入白名单的 url 接收数据,但我不明白这将如何允许 phonegap 将数据发送到远程服务器。
  • 是的,白名单,它适用于两种方式 - 执行 XHR GET 或 POST。

标签: angularjs cordova


【解决方案1】:

我相信对于 jsonp,你必须使用 .then 方法来处理承诺解析:

responsePromise.then(function (data){
    //success things go here
    console.log(data);
}, function(data({
    //error things go here
});

【讨论】:

  • 事情变得有点疯狂。我意识到我最初的问题是错误的。在我的远程服务器上,我正在做 res.send('success')。结果我收到了“成功”,但控制台告诉我它没有定义。所以控制台说响应是未定义的,而不是函数。我是否将格式不正确的消息发送回phonegap?必须是 JSON 吗?
  • 对不起大家-我的问题并没有真正解决这个问题。成功功能运行正常,我只是将格式不正确的数据发送回客户端。 Res.send('success') 是控制台日志记录“未定义成功”, res.jsonp('success') 可以解决问题。希望这可以帮助任何使用 angular 和 $http.jsonp 的人!
  • 理想情况下,您需要发回 JSON。
  • 它是 JSON,只是带有填充以允许跨域。
猜你喜欢
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 2018-04-22
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
相关资源
最近更新 更多