2012-03-26 76 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。