日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

angular js $post,$get请求传值

發布時間:2025/5/22 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 angular js $post,$get请求传值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

困擾了我好幾天的問題!!!

剛開始學play框架,在向后臺傳值時,一直不成功!

當你用$POST傳遞一個參數時:

HTML:

<button ng-click=test()>測試</button>

JS:

  $scope.test = function() {

    $http({
      method: 'POST',
      url: '/Application/jump',
      data:{name:"zby"},
    }).then(function successCallback(response) {
      // 請求成功執行代碼
      }, function errorCallback(response) {
    // 請求失敗執行代碼
    });

  }

我的后臺控制器方法:

  public static void test(String name) {
    System.out.println(name);

    System.out.println(params.get("name"));

  }

這樣傳到后臺的值為NULL,NULL。

我把JS換成:

  $scope.test = function() {
    $http({
      method: 'POST',
      url: '/Application/test',
      params: {name:"zby"},
    }).then(function successCallback(response) {
      // 請求成功執行代碼
    }, function errorCallback(response) {
      // 請求失敗執行代碼
    });
  }

后臺控制器方法不變。

傳到后臺的值為zby,zby。

同理傳遞多個參數也能成功,只要把JS里的params與后臺控制器的test的參數改成多個就行,但是兩個參數名字,個數必須一致。

還有一種方法則是把傳遞的值直接寫入URL里,把JS改成

  $scope.test = function() {
    var name = "zby";
    $http({
      method: 'POST',
      url: '/Application/test?name=' + name,
    }).then(function successCallback(response) {
      // 請求成功執行代碼
    }, function errorCallback(response) {
      // 請求失敗執行代碼
    });
  }

后臺控制器方法不變,照樣能接收到后臺傳來的值。

接下來看看$get方法傳值:

①方法傳到后臺的值與$post一樣為NULL,NULL。

②方法傳到后臺的值與$post一樣為zby,zby。

③方法傳到后臺的值與$post一樣為zby,zby。

所以能看出來這三種方法$post,$get傳值都一樣。

接下來我們看看第四種方法

  $scope.test = function() {
    $http({
      method: 'POST',
      url: '/Application/test',
      data: {name: "zby"},
      headers:{'Content-Type': 'application/x-www-form-urlencoded'},
      transformRequest: function(obj) {
        var str = [];
        for(var p in obj) {
          str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
        }
        return str.join("&");
      }
    }).then(function successCallback(response) {
      // 請求成功執行代碼
    }, function errorCallback(response) {
      // 請求失敗執行代碼
    });
  }

后臺控制器方法不變,傳遞到后臺的值為zby,zby。

那么我們看看這種方法GET請求行不行,將JS里的method改為method: 'GET',傳遞到后臺的值為NULL,NULL。

$get請求并不能用這種方法傳遞,而$post確可以。這是為什么呢?

來看看這四種方法的request請求到底發了啥數據過來

第①種:

$post

$get

第②種:

$post

$get

第③種:

$post

$get

第④種:

$post:

$get:

通過測試可知,

在第②種方法與第③種方法中,$post與$get請求都能夠向后臺傳值,并且通過圖的比較可知都是通過Query String Parameters傳值

在第①種方法中,$post與$get請求不能向后臺傳值,但是$post請求的圖中多出了

在第④種方法中,$get請求不能向后臺傳值,而$post請求能向后臺傳值,并且第①種與第④種的區別在于第④種方法添加了如下代碼:

      headers:{'Content-Type': 'application/x-www-form-urlencoded'},?
      transformRequest: function(obj) {?
        var str = [];?
        for(var p in obj) {?
          str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));?
        }?
        return str.join("&");?
      }?

為什么加了這段代碼$post請求就可以傳值成功了呢?

我們看看兩種的區別:

①:

④:

可以發現AngularJs用post 提交數據 以 json 格式提交的,而平時我們jquery post 提交數據是以 form-data 的形式提交的,只有把它轉化為form-data形式后臺才能接收到。

解決方法就是:改AngularJs 提交數據的方式,配置?header?值,使用?transformRequest對提交數據進行序列化,把 json 對象更改為字符串。

?

?

?

?

轉載于:https://www.cnblogs.com/zhengbiyu/p/8428083.html

總結

以上是生活随笔為你收集整理的angular js $post,$get请求传值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。