Javascript 回调函数不使用';在jQuery中使用getJSON函数时不起作用

Javascript 回调函数不使用';在jQuery中使用getJSON函数时不起作用,javascript,jquery,ajax,Javascript,Jquery,Ajax,我试图在jQuery中使用getJSON函数来导入一些数据并触发回调函数。回调函数没有运行。但是,如果我对get函数尝试同样的方法,它就可以正常工作。奇怪的是,即使我将“json”作为类型传递,它也可以与get函数一起工作。为什么会这样?我在Firefox 3和IE 7中测试了以下文件: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&

我试图在jQuery中使用getJSON函数来导入一些数据并触发回调函数。回调函数没有运行。但是,如果我对get函数尝试同样的方法,它就可以正常工作。奇怪的是,即使我将“json”作为类型传递,它也可以与get函数一起工作。为什么会这样?我在Firefox 3和IE 7中测试了以下文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title>ajax test</title>
<script type="text/javascript" src="/jquery-1.3.2.min.js"></script>
</head>
<body>
<input type="button" id="test1" value="get">
<input type="button" id="test2" value="getJSON">
<input type="button" id="test3" value="get with json type">
<script type="text/javascript">
$("#test1").click(function() {
    $.get("index.html",
        function(response) {
            alert('hi');
            //works
        }
    )
});

$("#test2").click(function() {
    $.getJSON("index.html",
        function(response) {
            alert('hi');
            //doesn't work
        }
    )
});

$("#test3").click(function() {
    $.get("index.html",
        function(response) {
            alert('hi');
            //works
        },
        "json"
    )
});
</script>
</body></html>

ajax测试
$(“#test1”)。单击(函数(){
$.get(“index.html”,
功能(响应){
警报(“hi”);
//工作
}
)
});
$(“#test2”)。单击(函数(){
$.getJSON(“index.html”,
功能(响应){
警报(“hi”);
//不起作用
}
)
});
$(“#test3”)。单击(函数(){
$.get(“index.html”,
功能(响应){
警报(“hi”);
//工作
},
“json”
)
});
无论我访问哪个URL,只要它位于同一个域上,这种情况似乎都会发生。我试着传递一些数据,但没有什么区别

当然,我可以像在第三个测试函数中那样使用get函数来解决这个问题,但我仍然很好奇为什么会发生这种情况


我知道这里有一个问题,但它没有回答我的问题。

json需要有效,否则回调将不会启动。

在表面下,当您调用
getJSON
时,发生了以下情况:

// ~ line 3216
getJSON: function( url, data, callback ) {
    return jQuery.get(url, data, callback, "json");
}, // ... rest of jQuery core
所以肯定有其他东西阻止回调触发


首先,我会在每次回调时发出**
alert
**不同的提示(不仅仅是“hi”),这样你就知道哪个回调失败/成功了

正如许多其他人所提到的,您需要有效的JSON(即符合中的规则)才能使
getJSON
正常工作(这意味着您无法通过
getJSON
获取HTML,如您的示例所示)

最后一个测试工作的原因是最后一个参数“json”没有被解释为“type”。因为以下操作不起作用:

$("#test3").click(function() {
    $.get("index.html",
        '',
        function(response) {
                alert('hi');
                //works
        },
        "json"
    )
});

尽管有格式良好的JSON等,我还是遇到了同样的问题。我能够查询我的Web服务并得到响应,但是,我的回调函数没有启动。搜索完网络后,我发现大多数网民都建议使用“jsonp”,因为我的应用程序会执行一些跨域调用,并且在我的url中添加了“回调”。这不起作用,但包含返回JSON的回调解决了我的问题。下面的代码解释了我的意思:

//server side json formed somewhere up here
String data = callback + "("+ json +")" ;
由此产生的响应类似于“
jsonp1280403476086”([{“Name”:“jacksparrow
” 这个jQuery似乎没有问题,所以我从来没有死过

希望这能有所帮助。

$.getJSON()是JSONP,所以请将其更改为:

$("#test2").click(function() {
    $.getJSON("index.html?callback=?",
        function(response) {
                alert('hi');
        }
    )
});
服务器接收到的param回调中填充了如下内容:jsonp1291077863309。
在响应回写回调函数jsonp1291077863309(在此处放置JSON)。

使用
$.post
而不是
$.getJSON()
,如果您使用的是MVC2中的
$.getJSON
$.get
请确保将
JsonRequestBehavior
设置为
AllowGet
。否则这将返回HTML错误,导致您的请求不能触发回调。

对!在疯狂尝试使
$.getJSON
接受格式良好的JSon str两天后从服务器返回时,问题确实出在服务器上!正如Carl_Platt所说,您必须将作为url参数接收的回调值预先添加到json输出中(PHP中的
$\u GET['callback']
),这就是所谓的“json-P输出”,以防您想在谷歌上搜索它

动手,这里是一个页面,他们用PHP展示了解决方案:

请记住(非常重要)向您调用的url添加
callback=?
参数!(仅当您调用的url不在为执行jquery脚本提供服务的同一服务器中时才需要)

JQuery将在发送到服务器之前自动用一个方便的值替换“?”。您不必担心使用哪个值,它对您来说都是无缝的(如果服务器做了正确的工作!这就是我的问题!):-)


希望有帮助!

确保您没有[HttpPost]上面列出了控制器中的JsonResult方法。这不会将数据返回到.getJSON调用。

可能是json格式不正确吗?也许我应该更清楚。index.html是我在上面发布的文件。我只是尝试访问文档本身,这不是最有用的东西。我只是把它放在那里,因为它是sim简单方便。再说一次,我为URL输入的内容似乎并不重要。json是否需要有效?问json是否需要有效可能听起来很傻,但如果需要,为什么第三个测试函数即使没有有效的json也能工作?试着使用一些有效的json进行测试,看看会发生什么。感谢您的快速响应。这是真的,Firefox和IE对无效JSON的反应不同这似乎是令人难以置信的事情之一-为什么它会默默地失败?但这绝对是真的。它是一个很好的验证器。非常感谢!对我来说幸运的是,我已经几天没有尝试了,但至少有几个小时了,而这正是我需要做的来修复它!