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
}
});
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。
- 2 回答
- 0 关注
- 224 浏览
添加回答
举报