$ .getJSON()中的代码未执行

时间:2011-12-15 10:32:07

标签: javascript jquery json

我无法弄清楚这里有什么问题。

$(function() {
    $('#cars').change(function() {
        var cars = $('#cars').val();
            $.getJSON('http://fooobar.com/data.php?id='+cars, function(data) {
                    alert('test');
        });
    });
});

请求http://fooobar.com/data.php?id=3像这样返回json字符串

 [{1: "sdadd"}]

问题在于代码

alert('test');
当对data.php的请求返回正确的json字符串但在没有返回数据时执行

,则不执行

我想念的是什么?

4 个答案:

答案 0 :(得分:3)

[{1: "sdadd"}]

不是正确的JSON字符串。您不能在对象中将数字设为keys,并且这些键不能以数字开头。 这就是为什么jQuery不执行你的success回调:

jQuery.getJSON( url [, data] [, success(data, textStatus, jqXHR)] )

根据documentation

  

从jQuery 1.4开始,如果JSON文件包含语法错误,请求通常会无提示失败

您可以尝试检查我是否正确:

jQuery.getJSON(...).error(function() { alert("error"); })

答案 1 :(得分:1)

我猜这是Same Origin Policy,它会停止在另一个域上调用AJAX的网页。

答案 2 :(得分:0)

您使用的格式不正确来执行跨域数据请求。 您需要返回JSONP数据,而不是JSON。 要使JSONP正常工作,您的网址为:

http://fooobar.com/data.php?id=3

通常会返回{ "result" : "some data" }

使用任何回调函数名称调用时,例如:

http://fooobar.com/data.php?id=3&callback=myJavascriptFunction 应该返回:myJavascriptFunction( { "result" : "some data" } ) 只有这样它才能用JSON数据调用你的回调javascript函数。

例如: 看看这两个支持JSONP格式的facebook api的api调用:

i)JSON:

https://graph.facebook.com/19292868552

ii)JSONP:

https://graph.facebook.com/19292868552?callback=myFunctionName

在此处阅读更多内容:http://api.jquery.com/jQuery.getJSON/

答案 3 :(得分:0)

同样的原产地政策是这里的问题,正如其他人所说的那样。

但这是他们没说的 - 如何解决它:

$.ajax({
    url: "someurl.com",
    dataType: "jsonp",
    data: {'some key':'somevalue', 'someotherkey':'val'},
    success: function(response) { alert(response); },
    error: function(jqXHR, textStatus, errorThrown) { 
        //do some error handling
        alert(jqXHR);
        alert(textStatus);
        alert(errorThrown);
    } 
});

我在这里使用$.ajax方法 - 基本上$.getJSONdataType:'json'的包装器。

注意:这将改变您的请求,以便它传递一个称为“回调”的参数,该参数将是完全随机的。这需要由服务器处理并作为函数名称传回:即

您的要求:

someurl.com/?something=something&callback=123456

应该返回:

123456({ "key":"value"});

并且应该允许您正常获取返回的数据。

参考: JSONP上的位和$ .ajax中可以使用的各种选项在这里非常好: http://api.jquery.com/jQuery.ajax/

维基百科上有一篇文章:http://en.wikipedia.org/wiki/JSONP#Padding

编辑:同样执行这样的请求并使用错误功能将允许您将任何错误抛出到控制台或警告框,这样您就可以检查返回的JSON是否有效。编辑标记以在失败时抛出警告框。