2011-09-07 51 views
1

求解:JSON在FireFox和Safari(Windows Vista)上返回空響應

問題在於Firefox 6.0.2的安全性。 我已將URL請求從: http://mysite.com/ajax/request 更改爲/ ajax /請求 及其工作。

如果您需要使用跨域,則需要使用jsonp作爲dataType。

非常感謝我的服務器返回一個空的響應evildead


我的JSON請求。 這隻發生在Windows Vista機器中的Firefox 6.0.2和Safari中。

輸出由php腳本生成並具有json /應用程序標題。

這將返回空響應:

$('#ajaxcall').click(function(){ 
var ts = new Date().getTime(); 
var urlz = $('#targeturl').val()+'/'+ts; 
var dataString = $("#datazz").val(); 
$.ajax({ 
    type: "POST", url: urlz, data: "data="+dataString, 
    success: function(data){ 
     var obj = jQuery.parseJSON(data); 

     for (var i = 0; i < obj.length; i++) { 
      var object = obj[i]; 
      for (property in object) { 
      var s = property + "=" + object[property] + "<br>"; 
       $("#console").after(s); 
      } 
     } 
    } 
}); 
}); 

除了這一點:

$("#tags").autocomplete({ 
     source: function(request, response) { 
      $.post("http://mysite.com/v2/ajax/tag_suggestion/ab", {data:request.term}, function(data){ 
       response($.map(data, function(item) { 

       if ($('#tagsboxvals').hasClass(item.name.split(' ').join('_'))){ 
       return null; 

       } else { 
       return { 
        label: item.name, 
        value: item.name 
       } 
       } 
       })) 
      }, "json"); 
      }, 
      .... 
}); 

感謝您的幫助

編輯:這是什麼PHP腳本生成:

$arr = array(
    array('name'=>'pizza', 'point'=>'1'), 
    array('name'=>'blt', 'point'=>'1')); 

    header('Cache-Control: no-cache, must-revalidate'); 
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
    header('Content-type: application/json'); 
    echo json_encode($arr); 

這是一個格式正確的JSON文檔。

頁眉: 響應頭 日期星期三,2011年9月7日23時58分42秒GMT 服務器的Apache/2.2.3(CentOS的) X供電,通過PHP/5.1.6 過期星期一,1997年7月26日05:00:00 GMT 緩存控制無緩存,必重新驗證 語用無緩存 Content-Length的29 連接緊密 內容類型的應用程序/ JSON 請求頭 主機mysite.com 的User-Agent的Mozilla /5.0(Macintosh; Intel Mac OS X 10.7; rv:6.0)Gecko/20100101 Firefox/6.0 接受application/json,text/javas cript,/;接受 - 字符集ISO-8859-1,utf-8; q = 0.7,*; q = 0.7 接收 - 編碼gzip, alive Content-Type application/x-www-form-urlencoded; charset = UTF-8 X-Requested-With XMLHttpRequest Referer http://mysite.com/v2/user/register Content-Length 8 Cookie city = new york; __utma = 100174657.1435105779.1308773648.1314994226.1315368765.113; __utmz = 100174657.1315368765.113.98.utmcsr = mysite.com | utmccn =(引薦)| utmcmd =轉診| utmcct =

集管投遞響應JSON 對象{名稱= 「比薩餅」,點= 1} [對象名{ =「pizza」,point = 1}]

它可以在同一臺機器上正常工作,但不支持firefox和safari。

+0

你能證明你的PHP腳本生成的JSON? – evildead

+0

在你的成功函數中添加一個'console.log(data)',讓我知道什麼是輸出 – goatslacker

+0

興奮我在想什麼,看到我的答案。你的json格式不正確! ]是否在最後一個響應行的結尾? – evildead

回答

2

你必須確保你的返回值是「真正的」json。有些瀏覽器不接受json,這在語法上不正確。

因此要100%確保您返回類似:

{"foo": 1, "bar": "foobar"} 

這是正確的JSON。

例如這是不是:

{'foo': 1, 'bar': "foobar"} 

這也是錯誤的:

{foo: 1, bar: "foobar"} 

進一步提出了一些建議,以你的JavaScript代碼:

return { 
       label: item.name, 
       value: item.name 
      } 

這是不正確的,包你的鑰匙在引號。 回報{ 「標籤」:item.name, 「值」:item.name }

一般來說,我讀過很多時候,你應該做的Ajax調用的GET請求不發佈,因爲POST產生更多的開銷和交通。但是不要因此而指責我。

此外,當你想返回例如從PHP中的數組,使用json_encode($ VAR)

http://php.net/manual/de/function.json-encode.php

爲了您的具體用例返回:

{"name": "pizza", "point": 1} 

你的PHP腳本中。

的螢火試試這個頁面上:

var obj = jQuery.parseJSON('[{"name":"pizza","point":1}]'); 

    for (var i = 0; i < obj.length; i++) { 
     var object = obj[i]; 
     for (property in object) { 
     var s = property + "=" + object[property] + "<br>"; 
      $("#console").after(s); console.log(s) 
     } 
    } 
+0

這是JSON響應:[{「name」:「pizza」,「point」:1}] – Reza