无法使用jquery getJSON获取json

时间:2012-03-26 20:33:53

标签: jquery json web-services callback

我有一个Web服务,我正在尝试通过JSON获取数据。如果我在同一服务器内访问工作正常,但当我上传到托管它不起作用。问题是“?callback =?” PARAM。使用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 shows:”,Access-Control-Allow-Origin不允许“ 我该怎么办?谢谢你的帮助!

4 个答案:

答案 0 :(得分:2)

您不能像这样跨域进行AJAX请求。请改用 JSONP

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:0)

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

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