首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在jQuery中使用getJSON函数时回调函数不起作用

在jQuery中使用getJSON函数时回调函数不起作用
EN

Stack Overflow用户
提问于 2009-04-20 22:36:59
回答 7查看 20.8K关注 0票数 18

我正在尝试使用jQuery中的getJSON函数来导入一些数据并触发回调函数。回调函数没有运行。但是,如果我用get函数做同样的事情,它会工作得很好。奇怪的是,即使当我传递"json“作为类型时,它也能与get函数一起工作。为什么会发生这种情况?我在Firefox3和IE7中测试了以下文件:

代码语言:javascript
复制
<!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>

无论我访问什么URL,只要它在同一个域上,似乎都会发生这种情况。我试着传递了一些数据,但没有什么不同。

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

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-04-20 22:50:51

json必须有效,否则回调将不会触发。

票数 24
EN

Stack Overflow用户

发布于 2010-11-30 08:56:33

$.getJSON()是JSONP,所以可以这样修改它:

代码语言:javascript
复制
$("#test2").click(function() {
    $.getJSON("index.html?callback=?",
        function(response) {
                alert('hi');
        }
    )
});

服务器接收到参数回调,其中填充了类似于: jsonp1291077863309的内容。在响应中,回写回调函数jsonp1291077863309( PUT_JSON_HERE)。

票数 4
EN

Stack Overflow用户

发布于 2011-09-27 03:18:21

正确的!经过两天的疯狂尝试,试图让$.getJSON接受来自服务器的格式良好的JSon字符串,问题确实出在服务器上!正如Carl_Platt所说,您必须将接收到的回调值作为url参数添加到json输出(PHP中的$_GET['callback'])。这就是所谓的"JSON-P输出“,以防你想用谷歌搜索它。

动手吧,这是一个用PHP展示解决方案的页面:

http://1080d.com/lang/en-us/2009/10/converting-php-to-jsonp-with-json_encode/

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

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

希望它能帮上忙!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/770381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档