为了账号安全,请及时绑定邮箱和手机立即绑定

Golang,Ajax - 如何在成功函数中返回切片或结构?

Golang,Ajax - 如何在成功函数中返回切片或结构?

Go
噜噜哒 2022-01-10 19:13:00
我的问题类似于此链接中的问题。我需要将多个切片或一个结构从 golang 返回到 ajax 成功块。我试图将我的切片编组为 JSON,但它在 ajax 中作为字符串接收。我需要将它作为数组接收。是否可以发送多个数组或这样的结构?我的代码:b, _ := json.Marshal(aSlice)      // json Marshalc, _ := json.Marshal(bSlice)this.Ctx.ResponseWriter.Write(b) // Beego responsewriterthis.Ctx.ResponseWriter.Write(c)我的阿贾克斯:$.ajax({        url: '/delete_process',        type: 'post',        dataType: 'html',        data : "&processName=" + processName,        success : function(data) {            alert(data);            alert(data.length)        }});提前致谢。
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

dataType您的 ajax 请求的参数应该json与您期望来自服务器的 JSON 数据一样。但是,如果您的服务器没有以有效的 JSON 响应,则 ajax 请求将导致错误。检查浏览器的 JavaScript 控制台是否有错误。


从您当前在控制器中所做的事情来看,它肯定会导致无效的 JSON 响应。见下文。


aSlice := []string{"foo", "bar"}

bSlice := []string{"baz", "qux"}


b, _ := json.Marshal(aSlice) // json Marshal

c, _ := json.Marshal(bSlice)


this.Ctx.ResponseWriter.Write(b) // Writes `["foo","bar"]`

this.Ctx.ResponseWriter.Write(c) // Appends `["baz","qux"]`

这导致发送["foo","bar"]["baz","qux"]Thats 只是两个附加在一起的 JSON 数组字符串。它无效。


您可能想要发送到浏览器的是:[["foo","bar"],["baz","qux"]].


那是两个数组的数组。您可以这样做以从服务器发送它。


aSlice := []string{"foo", "bar"}

bSlice := []string{"baz", "qux"}


slice := []interface{}{aSlice, bSlice}


s, _ := json.Marshal(slice) 

this.Ctx.ResponseWriter.Write(s) 

在javascript方面,


$.ajax({

        url: '/delete_process',

        type: 'post',

        dataType: 'json',

        data : "&processName=" + processName,

        success : function(data) {

            alert(data);

            alert(data[0]);    // ["foo","bar"]

            alert(data[1]);    // ["baz","qux"]

            alert(data.length) // 2

        }

});


查看完整回答
反对 回复 2022-01-10
?
跃然一笑

TA贡献1826条经验 获得超6个赞

现在如果你想要一个 Struct 你应该改变你的代码:


 package controllers


import "github.com/astaxie/beego"

import "encoding/json"



type Controller2 struct {

    beego.Controller

}


type Controller2Result struct {

    Accommodation []string

    Vehicle []string

}


func (this *Controller2) Post() {

   var result Controller2Result


   aSlice := []string{"House", "Apartment", "Hostel"}

   bSlice := []string{"Car", "Moto", "Airplane"}

   result.Accommodation = aSlice

   result.Vehicle = bSlice


   s, _ := json.Marshal(result) 

   this.Ctx.ResponseWriter.Header().Set("Content-Type", "application/json")

   this.Ctx.ResponseWriter.Write(s) 


}

阿贾克斯


  $.ajax({

           url: '/Controller2',

           type: 'post',

           dataType: 'json',

           //data : "&processName=" + processName,

           success : function(data) {

              alert(JSON.stringify(data));

           }

         });

这里解释的如何alert 只能显示字符串,data是 JavaScript 的对象类型。因此,您必须使用JSON.stringify将对象转换为 JSON-String。


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信