-1

我正在尝试进行简单的 ajax 调用,并将返回的 JSON 字符串转换为 javascript 数组。这得到了正确的值..代码不起作用。我想简单地返回 json 字符串并将其转换为数组..

function getData(){
    var barcode = $('#idQuery').val();
    alert(barcode);
    var test = $.ajax({
        type: 'GET',
        dataType: 'json',
        url: 'http://example.com/public/ruser/family',
        data: {barcode: barcode},
        success: function(data){
            alert(data);
        }
    });
    alert(test);
}

如果我把它放在 url 中,这是来自浏览器的响应。

[[{"age":10,"id":"1","name":"John Doe","points":"4275653423"}]]
4

3 回答 3

0
function getData(){
    var barcode = $('#idQuery').val();
    alert(barcode);
    $.ajax({
        type: 'POST',
        contenttype: "application/json; charset=utf-8",
        url: "controller/action",
        data: {barcode: barcode},
        success: function(data){
            alert(data);
        }
    });

}

尝试上面它应该工作让我知道进度......

于 2013-01-04T17:24:09.453 回答
0

编辑:一旦响应是有效的json,并且ajax成功回调执行,为了将服务器返回的json字符串转换为javascript对象使用JSON.parse()

success: function (data) {
    var obj = JSON.parse(data);
    alert(obj.age);
}

注意:只有更现代的浏览器原生支持 json 序列化 (JSON.parse)。为确保旧版浏览器支持此功能,建议使用 Douglas Crockford 的 json2.js:

https://github.com/douglascrockford/JSON-js/blob/master/json2.js

只需下载并将上述内容包含在您的页面中,您就可以开始了。

编辑:来自服务器的响应包括一个数组,其中包含另一个数组,其中包含带有数据的对象:

[[{"age":10,"id":"1","name":"John Doe","points":"4275653423"}]]

服务器需要响应一个只包含对象的 json 字符串:

'{"age":10,"id":"1","name":"John Doe","points":"4275653423"}'

最后,服务器必须以正确的内容类型“application/json”响应

编辑:在您的评论中,您说服务器返回 303,这是一个重定向。您在 ajax 调用中使用的 url 重定向到另一个返回您想要的数据的 url。您需要使用返回数据的 url。url 需要完全匹配。例如,http://example.com/public/ruser/family不等于http://example.com/public/ruser/family/

编辑:最终代码:

function getData(){
    var barcode = $('#idQuery').val();

    var test = $.ajax({
        type: 'GET',
        dataType: 'json',
        url: 'http://example.com/public/ruser/family.json',
        data: { barcode: barcode },
        success: function (data) {
            var obj = JSON.parse(data);
            alert(obj.age);
        }
    });
}
于 2013-01-04T17:10:52.083 回答
0

数据提供者是否与使用 $.ajax 的客户端在同一个域中?如果没有,您需要确保您使用的是 JSONP(我可以看到您不是来自您的函数),或者数据提供程序上的 Access-Control-Allow-Origin 标头设置为允许客户端域。

如果是跨域问题,则永远不会调用成功回调,您可以通过实现完整方法来测试错误以进行进一步调试。(注意:console.log 对调试比警报更有用。)

查看此日志为您记录的内容:

function getData(){
    var barcode = $('#idQuery').val();
    var test = $.ajax({
        type: 'GET',
        dataType: 'json',
        url: "http://api.flickr.com/services/feeds/photos_public.gne?format=json",
        data: {barcode: barcode},
        success: function(data){
            console.log(data);
        },
        complete: function(jqXHR, textStatus) {

            console.log(jqXHR)

            console.log("What's the issue? " + textStatus)
        }
    });
}

此外,如果您使用 Chrome 的开发工具(您应该这样做,因为它们很棒),任何跨域错误都会记录到控制台。(使用 F12 打开它或右键单击并检查元素。)

于 2013-01-04T17:39:51.873 回答