【问题标题】:Retrieve POST JSON response检索 POST JSON 响应
【发布时间】:2016-04-05 13:38:18
【问题描述】:

我正在一个 Groovy/Grails 平台上编写我的第一个 Ajax 请求。

    var newDataB = $.ajax({
    method:'post',
    url: url,
    async: false,
    data: {source:"${source}"},
    success: function (response) { 
        jsonData = response;
        var res = JSON.parse(jsonData);
                alert(res);//
    }
});

这是我的控制器“url”的响应

    def result = [ value: 'ok' ]
    render result as JSON

但它不起作用,我在浏览器中收到一条错误消息

SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data 
var res = JSON.parse(jsonData);

我不明白,响应似乎是格式不错的 JSON?

编辑我按照保罗的建议做了一个打印:

如果我执行

    var newDataB = $.ajax({
    method:'post',
    url: url,
    async: false,
    dataType: 'json',
    data: {source:"${source}"},
    success: function (response) { 
        console.log(response)
        console.log(response.value)
        jsonData = response;
    }
});

第一个打印是:

对象 { value="ok"}

第二张是

好的

如果我想得到结果,正确的方法是什么?

我是否必须在语句“成功:函数(响应){”中分配值

做类似的事情

var result

var newDataB = $.ajax({
    method:'post',
    url: url,
    async: false,
    dataType: 'json',
    data: {source:"${source}"},
    success: function (response) { 
    result = response.value
    }
});

console.log("result : "+result);

此代码对我有用!

或者也许有一种方法可以得到结果,比如

var newDataB = $.ajax({
    method:'post',
    url: url,
    async: false,
    dataType: 'json',
    data: {source:"${source}"},
    success: function (response) { 

    }
});

var result = newDataB.response.somethingblablabla

var result = OneFunction(newDataB.response)

??????

【问题讨论】:

  • 您确定需要解析它吗?如果你console.log(response)

标签: javascript jquery json ajax grails


【解决方案1】:

您可以在将对象传递给解析函数之前对其进行字符串化,只需使用JSON.stringify()

var newDataB = $.ajax({
        method: 'post',
        url: "${createLink(controller: 'util',action: 'test')}",
        async: false,
        data: {source: "abc"},
        success: function (response) {
            jsonData = response;
            var res = JSON.parse(JSON.stringify(jsonData));
            console.log(res);//
        }
    });

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    如果您的服务器提供 json,则不需要解析它。

    您可以使用 dataType 来强制 jQuery 使用特定类型:

    var newDataB = $.ajax({
        method:'post',
        url: url,
        async: false,
        dataType: 'json',
        data: {source:"${source}"},
        success: function (response) { 
            console.log(response);
    
        }
    });
    

    【讨论】:

    • 很抱歉没有删除您的 Parse。像上面一样尝试,响应应该只是一个你可以使用的 javascript 对象。
    猜你喜欢
    • 2017-12-03
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2015-11-02
    相关资源
    最近更新 更多