【问题标题】:cant get json with jquery getJSON无法使用 jquery getJSON 获取 json
【发布时间】:2012-03-26 20:33:53
【问题描述】:

我有一个网络服务,我正在尝试通过 JSON 获取数据。如果我在同一台服务器中访问工作正常,但是当我将它上传到主机时它不起作用。问题是“?回调=?”参数。使用 chrome 我看到了返回的 json,但下面的代码没有在输入文本中显示它:

   <html><head> <script src="jquery-1.7.1.min.js"  type="text/javascript" ></script>
    <script>
        $(document).ready(function()
        {   
            $("#cons").click(function(){
                alert("wait");
                var nombre = $("#nombre").attr('value');
                if(nombre!==''){
                    var today = new Date();
                    var mm = today.getMonth()+1; //January is 0!
                    var yyyy = today.getFullYear();

                    $.getJSON("http://grup15.mihost.info/index.php/WS/Api/user/nombre/"+nombre+"/ano/"+ yyyy +"/mes/"+mm+"/format/json?callback=?", function(data) {

                        var htmlResult = "";
                        $.each(data, function(key, val) {
                            htmlResult += val.total;
                        });

                        $('#gasto').attr('value',htmlResult);
                    });
                }else{
                    alert("Nombre Necesario");
                }
            });
        });
    </script>
</head>
<body>
    <table>
        <tr>
            <td>Nombre:</td>
            <td><input type="text" id="nombre" value=""/></td>
        </tr>
        <tr>
            <td>Gasto De este mes:</td>
            <td><input id="gasto" type="text" value=""/></td>
        </tr>
        <tr><td colspan="2"><button id="cons" type="button">Consultar</button></td></tr>
    </table>


</body>

如果我删除 "?callback=? chrome 显示:"Access-Control-Allow-Origin 不允许" 我该怎么办???感谢您的帮助!

【问题讨论】:

  • 您的服务器是否处理 JSONP?该请求需要解析回调函数名称并将请求包装在该名称的 JavaScript 函数中。

标签: jquery json web-services callback


【解决方案1】:

?callback=? 表示 JSONP,这意味着服务器应该返回 JSONP,而不是 JSON。

JSONP 实际上是一个脚本,看起来像这样:

func({data: 123, test: 456});

您的数据需要包装在callback 参数的值中。

【讨论】:

  • 如何将数据包装在回调参数的值中?谢谢!
  • @Roomm:读取callback参数的值(它是一个GET变量),然后打印一个字符串,如:func({data:12})。这是一个 PHP 示例:echo $_GET['callback'] . '(' . $data . ')';.
  • @Roomm:您需要编辑 服务器 上的“Web 服务”以使用 JSONP(在 客户端 上的 JavaScript 中)。
【解决方案2】:

您不能像这样跨域发出 AJAX 请求。请改用 JSONP

【讨论】:

  • 正在使用 JSONP,$.getJSON 在添加 ?callback=? 时使用 JSONP。
  • 我认为语法可能会混淆 jQuery "json?callback=?"应该是“jsoncallback=?”
  • 我不认为语法有问题,它是一个有效的 URL。
【解决方案3】:

Javascript 遵循“同源”政策,如下所述:

http://en.wikipedia.org/wiki/Same_origin_policy

这是一种防止跨站点脚本的安全措施。

您可以考虑此处讨论的解决方法: Ways to circumvent the same-origin policy

【讨论】:

  • 他在使用 JSONP,?callback=? 让 jQuery 使用 JSONP。
【解决方案4】:

如果您不能制作 JSONP,您可以构建一个包装函数来获取您的数据。也许通过 PHP。

看看:craigslist rss feed。我的解决方案是为使用 XML 而构建的,但应该很容易将 ist 转换为使用 JSON。

【讨论】:

    猜你喜欢
    • 2017-11-18
    • 2012-01-18
    • 2018-02-06
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多