2011-12-06 8 views
0

私はajax.phpをjQueryと呼んでいます。 JSONレスポンスを常に返します。IEで失敗したAjaxポスト

$.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以外のすべてのブラウザで正常に動作します(Internet Explorer 7,8,9でテスト済み)。 IEでは常に警告を表示します(つまり、応答情報を受け取ることはありません)。何か案は?

更新1:私は、ポストがIEで決して成功しないことを確認したので、データは常にnullです。

更新2:ポストは到着しますが、IEの場合のみnullを返します。

更新3(解決策):私のせいで、ajaxは他のサーバーからの呼び出しに対して保護していました。 $ _SERVER ['HTTP_REFERER']のホストが同じサーバーのホストであることを尋ねる最初のif()ステートメントを使います。今質問は、なぜIEは$ _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

アラートを取得しているので正常です。それは何らかの理由でnullです。あなたは成功を試みましたか?失敗:おそらくコードのどこかにエラーがあります。IEはそれを気に入らず、残りの部分は無視しています。 –

+0

警告の後に 'console.log(data)'を実行して、IEが取得しているデータがあればそれを調べてください。 –

+0

私はちょうどそのポストが決してIEでうまくいかないことを確認しました。そのため、データは常にnullです。 – andufo

答えて

1

ajaxは他のサーバーからの呼び出しに対して保護していました。 $ _SERVER ['HTTP_REFERER']のホストが同じサーバーのホストであることを尋ねる最初のif()ステートメントを使います。 IEでテストしていたマシンはホスト名を取得しませんでした。代わりに、それは常にfalseを投げたのは、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エラーはありません。問題は、ブラウザがポストレスポンスをリクエストしようとしたときに、何とかいつもnullをキャッチしているときです。: – 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)タイプ:application/json '); echo json_encode($ array); – andufo

+0

pls read update 3 – andufo

関連する問題