无法得到ajax回应

时间:2013-01-04 16:48:48

标签: javascript jquery ajax

我正在尝试进行简单的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);
}

如果我把它放在网址中,这是浏览器的响应。

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

3 个答案:

答案 0 :(得分: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。网址需要完全匹配。例如,http://example.com/public/ruser/familyhttp://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);
        }
    });
}

答案 1 :(得分: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);
        }
    });

}

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

答案 2 :(得分: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打开它或右键单击并检查元素。)