困扰了我好几天的问题!!!

刚开始学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 对象更改为字符串。

angular js $post,$get请求传值的更多相关文章

  1. angular开发中对请求数据层的封装

    代码地址如下:http://www.demodashi.com/demo/11481.html 一.本章节仅仅是对angular4项目开发中数据请求封装到model中 仅仅是在项目angular4项目 ...

  2. angular-使用iframe做独立页(iframe传值到angular和iframe里请求后台数据)

    这个方法使用过两次.一次是在项目中嵌入一个表达式生成器.因为用别人做好的网页变成组件很难,而且里面用了jq,与angular思想相反不能用.另一次是因为想要单独引用样式.而innerHTML使用的样式 ...

  3. Angular.JS

    AngularJS是什么? 完全使用 JavaScript编写的客户端技术.同其他历史悠久的 Web技术( HTML. CSS 和JavaScript)配合使用,使Web应用开发比以往更简单.更快捷. ...

  4. 如何在Angular优雅编写HTTP请求

    原文:https://segmentfault.com/a/1190000010570799 ----------------------------------------------------- ...

  5. axios中请求传值方式

    日常开发中与后端联调,可能需要的数据不同,所传值也有所不同 1.如果是data方式,设置请求头为:并且直接返回data就可以  raw axios.defaults.headers['Content- ...

  6. angular中a标签带请求头下载excel

    <!DOCTYPE html> <html lang="en" ng-app="app"> <head> <meta ...

  7. 带你了解 Angular 与 Angular JS

    Angular 是一个基于 TypeScript 的开源客户端框架,专为构建 Web 应用程序而设计. 另一方面,AngularJS 是 Angular 的第一个版本,用纯 JavaScript 编写 ...

  8. 数据的双向绑定 Angular JS

    接触AngularJS许了,时常问自己一些问题,如果是我实现它,会在哪些方面选择跟它相同的道路,哪些方面不同.为此,记录了一些思考,给自己回顾,也供他人参考. 初步大致有以下几个方面: 数据双向绑定 ...

  9. 常见的几个angular.js的问题

    来源于网络收集 一.ng-show/ng-hide 与 ng-if的区别? 我们都知道ng-show/ng-hide实际上是通过display来进行隐藏和显示的.而ng-if实际上控制dom节点的增删 ...

随机推荐

  1. Angular02 通过angular-cli来搭建web前端项目

    利用angular-cli的常见命令: npm i --save 包名   ->  软件依赖    npm i --save-dev 包名     ->  开发依赖    ng new 项 ...

  2. SQL数据开发(经典) 基本操作

    数据开发(经典) 1.按姓氏笔画排序: Select * From TableName Order By CustomerName Collate Chinese_PRC_Str oke_ci_as ...

  3. js分享功能

    引用JiaThis的分享功能: 直接在想要放置分享功能的地方加上如下代码即可: <!-- JiaThis Button BEGIN --> <div class="jiat ...

  4. CTF---密码学入门第三题 奇怪的短信

    奇怪的短信分值:10 来源: Ayn 难度:易 参与人数:5117人 Get Flag:2623人 答题人数:2858人 解题通过率:92% 收到一条奇怪的短信: 335321414374744361 ...

  5. bzoj:1700: [Usaco2007 Jan]Problem Solving 解题

    Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场 ...

  6. HDU 2066 最短路floyd算法+优化

    http://acm.hdu.edu.cn/showproblem.php?pid=206 题意 从任意一个邻居家出发 到达任意一个终点的 最小距离 解析 求多源最短路 我想到的是Floyd算法 但是 ...

  7. poj_2251

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 24311   Accepted: 9425 D ...

  8. 从XMLHttpRequest请求响应里getResponseHeader(header)报错:Refused to get unsafe header "**" 问题解决

    问题产生原因: 原因1:W3C的 xhr 标准中做了限制,规定客户端无法获取 response 中的 Set-Cookie.Set-Cookie2这2个字段,无论是同域还是跨域请求: 原因2:W3C ...

  9. [国嵌攻略][060][LCD工作原理解析]

    LCD硬件体系 1.LCD液晶屏 液晶属于一种有机化合物,分子形状为长棒状,在不同的电流作用下,分子会有规律旋转,这样对光线产生一定的控制形成一个像素,而很多像素右可以构成完整的图像. LCD是Liq ...

  10. Spider_Man_5.2 の Mongodb_使用

    一:简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库1.易用性 MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库.不采用关系型主要是为了获得 ...