前端使用jQuery的.$post()向后端Golang发送含中文的POST请求,中文解析不出

代码屠杀者 发布于 05/16 16:22
阅读 375
收藏 0

前端使用bootstrap框架,使用jQuery中的post向后端发送数据,中文显示乱码。

具体情况如下

前端post部分代码

 //点击注册按钮,获取数据并提交post请求
$("#RegisterButton").click(function () {
        var CompanyName=$("#CompanyNameR").val();
        var UnitNature =$("#UnitNatureR").find("option:selected").text();
        var UserName=$("#UserNameR").val();
        var IdNo=$("#IdNoR").val();
        var Phone=$("#PhoneR").val();
        var Email=$("#emailR").val();
        var Professional=$("#ProfessionalR").val();
        var JsonData = {
            ompanyName:CompanyName,
            UnitNature:UnitNature,
            UserName:UserName,
            IdNo:IdNo,
            Phone:Phone,
            Email:Email,
            Professional:Professional
        };
        //studentRuselt=encodeURIComponent(JSON.stringify(JsonData),"utf-8");
        $.ajax({
            type:"post",
            datatype: "Json",
            url:"http://127.0.0.1:9001",
            contentType: "application/x-www-form-urlencoded; charset=utf-8",
            data: JsonData,
            success: function (d) {

            }
        });
    });

 

后端Golang接收部分代码

package main

import (  
        "fmt"  
        "io/ioutil"  
        "net/http"
        "bytes"  
        /* "encoding/json" */
    )  
      
    func main() {  
        http.HandleFunc("/", myHandle)  
        http.ListenAndServe(":9001", nil)  
    }  
      
    func myHandle(w http.ResponseWriter, r *http.Request) {  
        defer r.Body.Close()  
        con, _ := ioutil.ReadAll(r.Body) //获取post的数据  
        fmt.Println(string(con)) 
/*         var user map[string]interface{} 
        json.Unmarshal(con, &user)
        fmt.Println("获取json中的username:", user["IdNo"])
        fmt.Println("获取json中的password:", user["Phone"].(string)) //转字符串通过len(password)!=0判断长度 */
    } 

注释掉的部分也有尝试过,获取不到正确数据

 

接受到的数据

从CompanyName 开始的部分数组,其中CompanyName从67开始到61结束  61也是就是=号结束后 应该是 “杭”字
[67 111 109 112 97 110 121 78 97 109 101 61 37 69 54 37 57 68 37 65 68]

这里为Println(string(con))后的结果
CompanyName=%E6%9D%AD%E5%B7%9E%E6%80%9D%E7%BB%BF&UnitNature=1.%E7%A7%91%E7%A0%94%E9%99%A2%E6%89%80&

 

加载中
1
代码屠杀者
代码屠杀者

 

问题终于解决,增加了

JSON.stringify

来格式化JSON后传输 就没有问题了

var JsonData = {
    CompanyName:CompanyName,
    UnitNature:UnitNature,
    UserName:UserName,
    IdNo:IdNo,
    Phone:Phone,
    Email:Email,
    Professional:Professional
};

$.ajax({
    type:"POST",
    dataType:"json",
    url:"http://localhost:9001",
    data: JSON.stringify({
            RegisterJson: JsonData
        }),
    success: function (d) {

    }
});

 

0
z
代码屠杀者
代码屠杀者
后发现,是改成了application/json后,就变成跨域传输了,在提交post请求前会有个OPTIONS请求,成功了后才会再次发送POST请求。
代码屠杀者
代码屠杀者
我发现了,但是现在前端 contentType:"application/json"了,理应可以了,但是设置断点的时候,发现他跳过了ajax这步
返回顶部
顶部