2011-12-06 68 views
0

我打電話給ajax.php用jQuery。它始終返回一個JSON響應。Ajax在IE上失敗

$.ajax({ 
     type: 'POST', 
     url: 'ajax.php', 
     data: 'some=info', 
     dataType: 'json', 
     success: function(data) { 
      if(data != null) { 
       console.log(data); 
      } else { 
       alert('IE fails here!'); 
      } 
     } 
    }); 

Ajax總是以JSON格式返回一些數據。它適用於除IE以外的所有瀏覽器(在IE 7,8和9上測試)。在IE中它總是打印警報(這意味着它永遠不會收到響應信息)。有任何想法嗎?

更新1:我剛剛確認該帖子在IE中永遠不會成功,這就是爲什麼數據始終爲空。

更新2:郵件到達,但只有當它是IE時才返回null。

更新3(解決方案):我的錯,ajax可以防止來自其他服務器的呼叫。它在開始時使用if()語句,要求$ _SERVER ['HTTP_REFERER']的主機是同一臺服務器的主機。現在的問題是,爲什麼IE不能識別ajax調用中的$ _SERVER ['HTTP_REFERER']?

這是API代碼(PHP)

if($_SERVER['REQUEST_METHOD'] == 'POST') { 
     $security = parse_url($_SERVER['HTTP_REFERER']); 
     if(in_array($security['host'],array('localhost','tradukka.com','173.203.198.123'))) { 
      header('Content-type: application/json'); 
      $array = array('nice','data','for','api'); 
       echo json_encode($translation); 
      } 
     } 
    } 

IE未能在$ _SERVER [ 'HTTP_REFERER']檢查:■

+1

但它是成功的,因爲它得到警報。由於某種原因它只是空。你是否嘗試過成功:失敗:?你可能在其他地方的代碼有錯誤 - IE不喜歡它,其餘的都忽略它。 –

+0

嘗試在alert.log後輸入「console.log(data)」,查看IE獲取的數據(如果有的話)。 –

+0

我剛剛確認該帖子在IE中永遠不會成功,這就是爲什麼數據始終爲空。 – andufo

回答

1

ajax可以防止來自其他服務器的呼叫。它在開始時使用if()語句,要求$ _SERVER ['HTTP_REFERER']的主機是同一臺服務器的主機。我在IE上測試的機器沒有得到主機的名字;相反它具有ip值,這就是爲什麼它總是拋出錯誤。

0

IE是臭名昭著的緩存AJAX請求。嘗試添加參數「緩存:假」您的要求:

$.ajax({ 
    type: 'POST', 
    cache: false, 
    url: 'ajax.php', 
    data: 'some=info', 
    dataType: 'json', 
    success: function(data) { 
     if(data != null) { 
      console.log(data); 
     } else { 
      alert('IE fails here!'); 
     } 
    } 
}); 

編輯您已確認有被拋出任何JavaScript錯誤?也許,被拋出然後被try/catch抓到,所以可能在瀏覽器中看不到?

+0

已經嘗試過,它仍然響應null。僅在IE瀏覽器中出現某種原因,後操作從未到達ajax.php。 – andufo

+0

查看更新後的文章 –

+0

yeap,沒有javascript錯誤。問題是當瀏覽器試圖請求post響應時,它總是捕獲空值:s – andufo

0

嘗試在dataType之前添加此項:'json'。

beforeSend: function(x) { 
    if(x && x.overrideMimeType) { 
    x.overrideMimeType("application/j-son;charset=UTF-8"); 
    } 
}, 

因此,它應該是這樣的:

$.ajax({ 
    type: 'POST', 
    url: 'ajax.php', 
    data: 'some=info', 
    beforeSend: function(x) { 
    if(x && x.overrideMimeType) { 
     x.overrideMimeType("application/j-son;charset=UTF-8"); 
     } 
    }, 
    dataType: 'json', 
    success: function(data) { 
     if(data != null) { 
      console.log(data); 
     } else { 
      alert('IE fails here!'); 
     } 
    } 
}); 

您的服務器需要發送數據的Content-Type「*/JSON」 - 如果此代碼不能正常工作,相應地修改您的響應頭。例如,發送「application/json」應該沒問題。

希望這會有所幫助。乾杯。

+0

沒有工作:(我在服務器端(php)標題('Content-請鍵入:application/json'); echo json_encode($ array); – andufo

+0

請閱讀更新3 – andufo