亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

AngularJS HTTP POST到PHP和未定義

AngularJS HTTP POST到PHP和未定義

慕雪6442864 2019-06-19 16:16:31
AngularJS HTTP POST到PHP和未定義我有一個帶有標簽的表格ng-submit="login()函數在javascript中被調用。function LoginForm($scope, $http){     $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';     $scope.email    = "[email protected]";     $scope.password = "1234";     $scope.login = function()     {         data = {             'email' : $scope.email,             'password' : $scope.password        };         $http.post('resources/curl.php', data)         .success(function(data, status, headers, config)         {             console.log(status + ' - ' + data);         })         .error(function(data, status, headers, config)         {             console.log('error');         });     }}我從PHP文件中得到了一個200 OK響應,但是返回的數據表明email和password都是未知的。這就是我所有的php<?php $email = $_POST['email'];$pass  = $_POST['password'];echo $email;?>你知道我為什么不知道POST價值?編輯我想指出的是,這似乎是一個很流行的問題(但它已經很老了),.success和.error已被否決,您應該使用.then@James Gentes在評論中指出
查看完整描述

3 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

安古拉杰.post()默認內容類型標頭為application/json..您正在將此重寫為傳遞窗體編碼的數據,但不更改data值以傳遞適當的查詢字符串,因此PHP不填充$_POST如你所料。

我的建議是只使用默認的angularjs設置application/json作為頭文件,讀取PHP中的原始輸入,然后反序列化JSON。

這可以在PHP中實現,如下所示:

$postdata = file_get_contents("php://input");$request = json_decode($postdata);$email = $request->email;$pass = $request->password;

或者,如果你嚴重依賴$_POST功能,您可以形成如下所示的查詢字符串[email protected]&password=somepassword并以數據的形式發送。確保此查詢字符串是URL編碼的。如果手動構建(而不是使用類似的jQuery.serialize()),Javascript的encodeURIComponent()應該為你做點什么。


查看完整回答
反對 回復 2019-06-19
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

在我的init文件開始時,我在服務器端這樣做,工作起來很有魅力,您不需要在有角的或現有的php代碼中做任何事情:

if ($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST))
    $_POST = json_decode(file_get_contents('php://input'), true);


查看完整回答
反對 回復 2019-06-19
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

在我正在開發的API中,我有一個基本控制器,在它的_struction()方法中,我有以下內容:

if(isset($_SERVER["CONTENT_TYPE"]) && strpos($_SERVER["CONTENT_TYPE"], "application/json") !== false) {
    $_POST = array_merge($_POST, (array) json_decode(trim(file_get_contents('php://input')), true));}

這允許我在需要時將json數據簡單地引用為$_post[“var”]。效果很好。

這樣,如果經過身份驗證的用戶與這樣一個庫連接,jQuery將發送帶有默認內容類型的POST數據-Type:application/x-www-form-urlencode或content-Type:application/json,則API將響應而不出錯,并使API更加友好。

希望這能幫上忙。


查看完整回答
反對 回復 2019-06-19
  • 3 回答
  • 0 關注
  • 687 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號