除了自己的(TBD)登录功能外,我希望我的AngularJS应用程序能够接受来自其他应用程序的令牌作为有效的登录备选方案。如果可能的话,我不希望在URL / GET参数中看到该标记,但是我找不到任何方法来处理POST参数。目前,应用程序由HTML5引导。我想避免编写脚本,但PHP和Python并非不可能。
Angular中有没有办法获得POST参数?
答案 0 :(得分:4)
无法在单页面应用程序中获取POST参数,因为您无法像Web浏览器一样发送到客户端;你只能发布到服务器。
当您发出POST请求时,服务器会解释变量并返回一个资源(如HTML页面)作为响应。默认情况下,该页面无法访问生成它的请求中的任何标头或数据。您可以访问GET参数的唯一原因是JavaScript可以检查加载页面的URL,这恰好是存储参数的位置。
某些服务器脚本将是必要的,但它不应该太难。一个快速而肮脏的答案是使用服务器脚本将POST参数注入JavaScript代码(例如,在PHP中)
echo "<script>doSpecialLogin(".$_POST['superSecretKey'].");</script>"
但是,我还强烈建议您花些时间确保您的方法确实安全,并且可能会考虑OAuth等技术。
答案 1 :(得分:0)
从客户端向服务器发送HTTP请求。 您可以通过两种方式从服务器将数据发送回客户端:标头和响应正文。对于POST和GET,它的工作方式完全相同,不同之处在于您还可以使用POST发送请求正文。
现在让我们假设您正在使用AngularJS's $http。
$http.get(url)
向服务器发送GET请求。您可以使用.success(callback)
捕获响应,其中使用表示响应主体的参数调用回调。
$http.post(url, requestData)
与发送请求正文的requestData
完全相同。
其中
function callback(responseBody) {
}
服务器端,在PHP中,脚本输出的所有内容都会发送回客户端
并且responseBody
参数将包含它。
因此,使用POST,您可以使用请求正文将数据从客户端发送到服务器,并使用响应正文将数据从服务器发送回客户端。 / p>
整个“两步”流程是HTTP POST请求。