最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

AngularJs的$http發(fā)送POST請(qǐng)求,php無(wú)法接收Post的數(shù)據(jù)問(wèn)題及解決方案

 更新時(shí)間:2020年08月13日 12:33:27   作者:浮云也是種寂寞  
這篇文章主要介紹了AngularJs的$http發(fā)送POST請(qǐng)求,php無(wú)法接收Post的數(shù)據(jù)的問(wèn)題及解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

最近在使用AngularJs+Php開(kāi)發(fā)中遇到php后臺(tái)無(wú)法接收到來(lái)自AngularJs的數(shù)據(jù),在網(wǎng)上也有許多解決方法,卻都點(diǎn)到即止.多番摸索后記錄下解決方法:

tips:當(dāng)前使用的AngularJs版本為v1.5.0-rc.0

原因分析:

在使用jquery的時(shí)候進(jìn)行post請(qǐng)求的時(shí)候很簡(jiǎn)單.

$.ajax({
 type: 'POST',
 url:'process.php',
 data: formData,
 dataType: 'json',
 success: function(result){
 //do something
 }
 });

對(duì)這個(gè)傳輸?shù)臄?shù)據(jù)我們一般會(huì)直接使用serialize()或使用serializeArray()處理后再傳輸,但在發(fā)送post請(qǐng)求時(shí)jquery會(huì)把這個(gè)對(duì)象轉(zhuǎn)換為字符串后再發(fā)送,類(lèi)似"a=123&b=456".
而AngularJs傳輸?shù)氖且粋€(gè)Json數(shù)據(jù)而不是一個(gè)轉(zhuǎn)換后的字符串,在php端接收的時(shí)候不能直接使用$_POST方式接收.這樣是獲取不到數(shù)據(jù)的.
$POST方式只能接收Content-Type: application/x-www-form-urlencoded提交的數(shù)據(jù),也就是表單提交的數(shù)據(jù).
但可以使用file_get_contents("php://input")接收,對(duì)于沒(méi)有沒(méi)有指定Content-Type的Post數(shù)據(jù)也是可以接收到的,此時(shí)獲取到的是個(gè)字符串還需要再轉(zhuǎn)換才能變成我們想要的數(shù)據(jù)格式.這樣無(wú)疑增加了工作量.

解決方案:

1.引用JQuery,使用JQuery的$.param()方法序列化參數(shù)后傳遞

$http({
 method : 'POST',
 url: 'process.php',
 data: $.param($scope.formData), //序列化參數(shù)
 headers: { 'Content-Type': 'application/x-www-form-urlencoded' } )
}) 

2.使用file_get_contents("php://input")獲取再處理

$input = file_get_contents("php://input",true);
echo $input; 

3.修改Angular的$httpProvider的默認(rèn)處理(參考:http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/)

// Your app's root module...
angular.module('MyModule', [], function($httpProvider) {
 // Use x-www-form-urlencoded Content-Type
 $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
 
 /**
 * The workhorse; converts an object to x-www-form-urlencoded serialization.
 * @param {Object} obj
 * @return {String}
 */
 var param = function(obj) {
 var query = '', name, value, fullSubName, subName, subValue, innerObj, i;
 
 for(name in obj) {
 value = obj[name];
 
 if(value instanceof Array) {
 for(i=0; i<value.length; ++i) {
 subValue = value[i];
 fullSubName = name + '[' + i + ']';
 innerObj = {};
 innerObj[fullSubName] = subValue;
 query += param(innerObj) + '&';
 }
 }
 else if(value instanceof Object) {
 for(subName in value) {
 subValue = value[subName];
 fullSubName = name + '[' + subName + ']';
 innerObj = {};
 innerObj[fullSubName] = subValue;
 query += param(innerObj) + '&';
 }
 }
 else if(value !== undefined && value !== null)
 query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
 }
 
 return query.length ? query.substr(0, query.length - 1) : query;
 };
 
 // Override $http service's default transformRequest
 $httpProvider.defaults.transformRequest = [function(data) {
 return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
 }];
});
$http({
 method:"POST",
 url:"/api/login.php",
 data:$scope.Account
});

補(bǔ):

php獲取時(shí)也可通過(guò)$GLOBALS['HTTP_RAW_POST_DATA']獲取POST提交的原始數(shù)據(jù).

$GLOBALS['HTTP_RAW_POST_DATA']中是否保存POST過(guò)來(lái)的數(shù)據(jù)取決于centent-Type的設(shè)置,即POST數(shù)據(jù)時(shí) 必須顯式示指明Content-Type: application/x-www-form-urlencoded,POST的數(shù)據(jù)才會(huì)存放到 $GLOBALS['HTTP_RAW_POST_DATA']中.

總結(jié)

到此這篇關(guān)于A(yíng)ngularJs的$http發(fā)送POST請(qǐng)求,php無(wú)法接收Post的數(shù)據(jù)解決方案的文章就介紹到這了,更多相關(guān)AngularJs的$http發(fā)送POST請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • AngularJS指令用法詳解

    AngularJS指令用法詳解

    這篇文章主要介紹了AngularJS指令用法,較為詳細(xì)的分析了AngularJS指令的功能、用法及自定義指令的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-11-11
  • 詳解AngularJS的通信機(jī)制

    詳解AngularJS的通信機(jī)制

    這篇文章主要介紹了AngularJS的通信機(jī)制,AngularJS是非常具有人氣的JavaScript庫(kù),需要的朋友可以參考下
    2015-06-06
  • angularjs 源碼解析之scope

    angularjs 源碼解析之scope

    $scope 的使用貫穿整個(gè) Angular App 應(yīng)用,它與數(shù)據(jù)模型相關(guān)聯(lián),同時(shí)也是表達(dá)式執(zhí)行的上下文.有了 $scope 就在視圖和控制器之間建立了一個(gè)通道,基于作用域視圖在修改數(shù)據(jù)時(shí)會(huì)立刻更新 $scope,同樣的 $scope 發(fā)生改變時(shí)也會(huì)立刻重新渲染視圖.
    2016-08-08
  • Ubuntu系統(tǒng)下Angularjs開(kāi)發(fā)環(huán)境安裝

    Ubuntu系統(tǒng)下Angularjs開(kāi)發(fā)環(huán)境安裝

    本文主要介紹 Ubuntu系統(tǒng)下Angularjs開(kāi)發(fā)環(huán)境安裝,這里詳細(xì)介紹了安裝步驟和注意事項(xiàng),有在Ubuntu 環(huán)境下開(kāi)發(fā)的朋友可以參考下
    2016-09-09
  • Angular中使用$watch監(jiān)聽(tīng)object屬性值的變化(詳解)

    Angular中使用$watch監(jiān)聽(tīng)object屬性值的變化(詳解)

    下面小編就為大家?guī)?lái)一篇Angular中使用$watch監(jiān)聽(tīng)object屬性值的變化(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Commands Queries設(shè)計(jì)模式提高Angular應(yīng)用性能及可維護(hù)性

    Commands Queries設(shè)計(jì)模式提高Angular應(yīng)用性能及可維護(hù)性

    在A(yíng)ngular應(yīng)用開(kāi)發(fā)領(lǐng)域,Commands and Queries 設(shè)計(jì)模式是一個(gè)關(guān)鍵的概念,它有助于有效地管理應(yīng)用程序的狀態(tài)和與后端的交互,本文將深入探討這一設(shè)計(jì)模式的核心要點(diǎn),并通過(guò)實(shí)際示例來(lái)加以說(shuō)明
    2023-10-10
  • 如何使用AngularJs打造權(quán)限管理系統(tǒng)【簡(jiǎn)易型】

    如何使用AngularJs打造權(quán)限管理系統(tǒng)【簡(jiǎn)易型】

    這篇文章主要介紹了使用AngularJs打造權(quán)限管理系統(tǒng)【簡(jiǎn)易型】的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • MODULE_INITIALIZER初始化Angular?懶加載模塊高級(jí)技巧

    MODULE_INITIALIZER初始化Angular?懶加載模塊高級(jí)技巧

    這篇文章主要為大家介紹了MODULE_INITIALIZER初始化Angular懶加載模塊高級(jí)技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 詳解Angular動(dòng)態(tài)組件

    詳解Angular動(dòng)態(tài)組件

    本文主要介紹了Angular動(dòng)態(tài)組件,對(duì)此感興趣的同學(xué),可以親自實(shí)驗(yàn)一下。
    2021-05-05
  • Angularjs的啟動(dòng)過(guò)程分析

    Angularjs的啟動(dòng)過(guò)程分析

    本篇文章主要介紹了Angularjs的啟動(dòng)過(guò)程分析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07

最新評(píng)論

吴江市| 民乐县| 福鼎市| 黑山县| 鹤山市| 新蔡县| 叶城县| 阿拉善右旗| 石泉县| 喜德县| 新绛县| 石门县| 惠水县| 宝坻区| 麻阳| 龙里县| 九江市| 和顺县| 津南区| 广安市| 光泽县| 句容市| 胶州市| 东光县| 永平县| 泰宁县| 佛教| 东台市| 隆子县| 县级市| 会泽县| 张家口市| 文化| 乡城县| 沿河| 宜兰市| 宝应县| 吉木乃县| 新密市| 唐河县| 拉孜县|