关于前后端的参数传递

以前端javascript,后端nodejs+express为例,后端可以从前端发来的request里获取这些属性:header、query、url、params、body,其中params和query是从url中解析获得,不过express已帮我们做好了,就不用我们自己再折腾处理url里的这些参数,除了body外,其他位置传递参数的话,后端直接取就可以了,不用再通过解析器来处理,不过由于浏览器对参数长度的限制,参数较多或参数较长的话,就只能通过body来传递参数了,这时候就需要考虑参数的编码和解析了。
html表单提交到后端,form属性里enctype可以指定编码类型,一般传二进制文件或base64编码的图片或数据采用multipart/form-data ,传普通的字段值采用 application/x-www-form-urlencoded ,前后端理解一致不编码直接文本字符串传输可以用text/plain。
后端用对应的解析方法解析即可,比如可以将express.urlencoded({ extended: false })作为对应接口调用的中间件来处理传入的body参数解析。
jquery里的ajax调用,又是怎样的呢?一般我们会将参数放在ajax的data属性的json对象中,每个参数对应json对象的一个属性,get方法时,这些参数会转换成query参数传递到后端,后端直接从req,query中获取即可。post方法的话,这些参数会放在body里传递到后端。注意了,此时有个小坑:如果在ajax调用中,代码这样写的话

    $.ajax({
      url: './hello1',
      type: 'post',
      data: {"hello2":"hello3"},
      contentType:'application/json'
    });

那么后端中间件用express.json()的话,会报错,正确的书写方法是:

    $.ajax({
      url: './hello1',
      type: 'post',
      data: JSON.stringify({"hello2":"hello3"}),
      contentType:'application/json'
    });

这么难看?还要转字符串?能不能写得简单些呢,是可以的

    $.ajax({
      url: './hello1',
      type: 'post',
      data: {"hello2":"hello3"}
    });

不过后端就不能用json来解析了,要用express.urlencoded({ extended: false })这个中间件。那不是很好么?前端代码清爽了许多呢。不是这样理解,urlencode编码跟json比起来有一些限制,特别是传递一些带有特殊字符的参数会导致前后端不一致而出现问题,所以我个人是建议最好采用json来传递参数。

相关推荐

  1. 关于前后参数传递

    2024-05-02 10:42:06       33 阅读
  2. springMVC前后请求参数绑定和传递

    2024-05-02 10:42:06       18 阅读
  3. 前端网页之间传递参数

    2024-05-02 10:42:06       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-02 10:42:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-02 10:42:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-02 10:42:06       82 阅读
  4. Python语言-面向对象

    2024-05-02 10:42:06       91 阅读

热门阅读

  1. 【C++风云录】创新编程:艺术生成与计算艺术

    2024-05-02 10:42:06       26 阅读
  2. centos学习- ps命令详解-进程监控的利器

    2024-05-02 10:42:06       35 阅读
  3. 【PTA】L1-005 考试座位号

    2024-05-02 10:42:06       31 阅读
  4. XCP协议是啥

    2024-05-02 10:42:06       39 阅读
  5. xml,json和protobuffer

    2024-05-02 10:42:06       32 阅读
  6. Boost读写xml

    2024-05-02 10:42:06       28 阅读
  7. Spring Clound介绍

    2024-05-02 10:42:06       36 阅读
  8. TiDB中的PD--元数据管理和调度中心

    2024-05-02 10:42:06       25 阅读
  9. MariaDB远程访问2点的事情

    2024-05-02 10:42:06       28 阅读
  10. OceanBase的锁机制相比Oracle有哪些特点?

    2024-05-02 10:42:06       31 阅读
  11. Elasticsearch内置分析器全面解析

    2024-05-02 10:42:06       40 阅读