2012-03-26 47 views
0

我有一个Web服务,我试图通过JSON来获取数据。如果我在同一台服务器上访问工作正常,但是当我将其上传到主机时,它不起作用。问题是“?callback =?” PARAM。铬我看到返回的JSON,但下面的代码并没有在输入文本中表现出来:不能得到的json与jQuery的getJSON

<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> 

如果我删除了“回调=铬显示:??”不被访问 - 允许控制允许起源” 我有什么的帮助吗???谢谢!

+1

你的服务器是否处理JSONP?该请求需要解析回调函数名称并将该请求包装在该名称的JavaScript函数中。 – Joe 2012-03-26 20:36:42

回答

2

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

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

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

你的数据需要被包裹在callback参数的值。

+0

如何将数据包装在回调参数的值中?谢谢! – Roomm 2012-03-26 20:42:46

+0

@Roomm:读取'callback'参数(它是一个GET变量)的值,然后打印一个字符串,如:'func({data:12})'。这里有一个PHP示例:'echo $ _GET ['callback']。 '('。$ data。')';'。 – 2012-03-26 20:46:48

+0

谢谢!!但我需要在javascrip中做到这一点是可能的? – Roomm 2012-03-26 20:49:30

2

你不能让AJAX请求跨域这样的。使用JSONP代替。

+1

他使用JSONP,当添加'?callback =?'时,'$ .getJSON'使用JSONP。 – 2012-03-26 20:36:35

+0

我觉得这个语法可能会令人困惑jQuery“json?callback =?”应该是“jsoncallback =?” – 2012-03-26 20:39:07

+0

我不认为语法是一个问题,它是一个有效的URL。 – 2012-03-26 20:40:11

0

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

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