go ajax接口,用Go语言进行ajax回传

一、后端部分

要想使用ajax,先要准备一个func (http.ResponseWriter, *http.Request)类型的函数来处理前端发过来的请求。

func OnAjax(res http.ResponseWriter, req *http.Request) {

io.WriteString(res, "这是从后台发送的数据")

}

接下来,要把一个网址和它对应起来,例如主页下的“/ajax”:

http.HandleFunc("/ajax", OnAjax)

二、HTML部分

网页上的内容很简单,只有一个按钮和一个文字输入框。

html>

Go语言与ajax示例

三、js部分

这部分没什么好说的,就是XMLHttpRequest那点事。

window.onload = main;

function main() {

var oBtn = document.getElementById(‘btn1‘);

oBtn.onclick = OnButton1;

}

function OnButton1() {

var xhr = new XMLHttpRequest();

xhr.open(‘get‘, ‘/ajax‘, true);

xhr.send();

xhr.onreadystatechange = function () {

if (xhr.readyState == 4) { // 读取完成

if (xhr.status == 200) {

var oTxt = document.getElementById(‘txt1‘);

oTxt.value = xhr.responseText;

}

}

}

}

收到服务器传过来的数据后,在输入框上就可以看到文字了。

41e0f966a46ddc59bd852faf3d07e661.png

四、完整Go代码

package main

import (

"bytes"

"errors"

"fmt"

"html/template"

"io"

"net/http"

"runtime"

)

// 端口

const (

HTTP_PORT  string = "80"

HTTPS_PORT string = "443"

)

// 目录

const (

CSS_CLIENT_PATH   = "/css/"

DART_CLIENT_PATH  = "/js/"

IMAGE_CLIENT_PATH = "/image/"

CSS_SVR_PATH   = "web"

DART_SVR_PATH  = "web"

IMAGE_SVR_PATH = "web"

)

func init() {

runtime.GOMAXPROCS(runtime.NumCPU())

}

func main() {

// 先把css和脚本服务上去

http.Handle(CSS_CLIENT_PATH, http.FileServer(http.Dir(CSS_SVR_PATH)))

http.Handle(DART_CLIENT_PATH, http.FileServer(http.Dir(DART_SVR_PATH)))

// 网址与处理逻辑对应起来

http.HandleFunc("/", HomePage)

http.HandleFunc("/ajax", OnAjax)

// 开始服务

err := http.ListenAndServe(":"+HTTP_PORT, nil)

if err != nil {

fmt.Println("服务失败 /// ", err)

}

}

func WriteTemplateToHttpResponse(res http.ResponseWriter, t *template.Template) error {

if t == nil || res == nil {

return errors.New("WriteTemplateToHttpResponse: t must not be nil.")

}

var buf bytes.Buffer

err := t.Execute(&buf, nil)

if err != nil {

return err

}

res.Header().Set("Content-Type", "text/html; charset=utf-8")

_, err = res.Write(buf.Bytes())

return err

}

func HomePage(res http.ResponseWriter, req *http.Request) {

t, err := template.ParseFiles("web/loli.html")

if err != nil {

fmt.Println(err)

return

}

err = WriteTemplateToHttpResponse(res, t)

if err != nil {

fmt.Println(err)

return

}

}

func OnAjax(res http.ResponseWriter, req *http.Request) {

io.WriteString(res, "这是从后台发送的数据")

}

原文:http://my.oschina.net/jthmath/blog/390842

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值