【问题标题】:How to post a json request and recieve json response to "go server" (go language) using java script如何使用 java 脚本发布 json 请求并接收对“go server”(go 语言)的 json 响应
【发布时间】:2018-03-18 02:01:55
【问题描述】:

如何使用 java 脚本发布 json 请求并从“go server”(go 语言)接收 json 响应

我试过了

java脚本代码:

var calculate = { 
                operand1 : null,
                operand2 : null,
                operator : null
};

function UserAction() {
    var xhttp = new XMLHttpRequest();
    xhttp.open("POST", "http://localhost:8000/", true);
    xhttp.setRequestHeader("Content-type", "application/json");
    xhttp.send(calculate);
    var response = (xhttp.responseText);
    console.log(response);
}
UserAction();

去代码:

package main
import ("fmt"
        "net/http"
        "encoding/json"
)


type answer struct {
    result float64
}


func index(w http.ResponseWriter, r *http.Request) {
    ans := answer{result: 30}
    fmt.Println(r)
    w.Header().Set("Content-Type", "application/json; charset=UTF-8")
    w.WriteHeader(http.StatusOK)
    if err := json.NewEncoder(w).Encode(ans); err != nil {
        panic(err)
    }    
}

func main() {
    http.HandleFunc("/",index)
    fmt.Println("Server online at port localhost:8000")
    http.ListenAndServe(":8000", nil)

}

我收到一条错误消息

无法加载http://localhost:8000/:对预检请求的响应 没有通过访问控制检查:没有“Access-Control-Allow-Origin” 请求的资源上存在标头。原点“空”是 因此不允许访问。

【问题讨论】:

    标签: javascript json http go xmlhttprequest


    【解决方案1】:

    在您的 Golang 代码中设置 Access-Control-Allow-Origin 标头以允许请求表单跨域

    func index(w http.ResponseWriter, r *http.Request) {
        ans := answer{result: 30}
        fmt.Println(r)
        w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
        w.Header().Set("Content-Type", "application/json; charset=UTF-8")
        w.Header().Set("Access-Control-Allow-Origin", "*")
        w.WriteHeader(http.StatusOK)
        if err := json.NewEncoder(w).Encode(ans); err != nil {
            panic(err)
        }    
    }
    

    您还可以使用此 API 对通过主路由内部的每个请求使用 CORS 处理程序。

    func main() {
        mux := http.NewServeMux()
        mux.HandleFunc("/",index)
        handler := cors.Default().Handler(mux)
        fmt.Println("Server online at port localhost:8000")
        http.ListenAndServe(":8000", handler)
    }
    

    【讨论】:

    • 更改后无法加载localhost:8000:请求标头字段 Content-type 在预检响应中被 Access-Control-Allow-Headers 不允许
    • 我们需要设置标题以允许选项Access-Control-Allow-Headers
    • 你能告诉我如何操作我们发送和接收的数据吗?我只想将它们转换为变量
    • @akashsc 那是另一个问题如果我的代码有效。请接受它并使用您的代码发布另一个问题,我们一定会为您提供帮助。
    猜你喜欢
    • 2013-03-18
    • 2023-03-23
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多