JSON yapısı IE7 (JavaScript) çalışmıyor

8 Cevap php

Tamam, benim soru biraz cahil eğer öyleyse beni affet lütfen JSON yeniyim - Ben çok fazla kafamı duvara yendi ve bazı uzman önerileri gerekir.

Ben bir HTML sayfası geri basit bir JSON veri yapısı geçer ve sonra sayfa gelen unsurlardan birini yazmak için jQuery kullanan bir örnek PHP sayfasına bir çağrı yapmak için jQuery JSON / AJAX işlevlerini kullanan nereye çalışan basit bir örnek almaya çalışıyorum sayfaya ait veri yapısı. FF çalışır. IE7 arrrggghhhh çalışmıyor!

HTML Kodu (ilgili bölümleri):

<script language="javascript" type="text/javascript" src="jquery.js"></script>
<script language="javascript" type="text/javascript">
function testAJAX() {
  $.getJSON("test-ajax.php", function(json){
      $("#div1").html(json.var1[1]);
  });
}
</script>
</head>
<body>
<input type="button" value="test ajax" onclick="testAJAX();" />
<div id="div1"> </div>
</body>

PHP Kodu (test-ajax.php):

<?php
include_once('./json.php'); 
$output = array('var1' => array('value1a', 'value1b', 'value1c'), 
                'var2' => array('value2a', 'value2b', 'value2c')); 

header("Content-type: text/plain");
echo json_encode($output);
?>

JSON.php kullanıyorum json_encode () işlevi vardır - http://us2.php.net/manual/en/function.json-encode.php aldım. Ben PHP5 yok ve benim sys yöneticileri bunun için herhangi bir destek yüklemek olmaz, çünkü ben bunu kullanıyorum. Sadece tarayıcınızda doğrudan test AJAX.php inceleyen böyle bir tefrika JSON yapısını yazdırır:

{"var1":["value1a","value1b","value1c"],"var2":["value2a","value2b","value2c"]}

hangi geçerli bir JSON yapı olarak görünmektedir. Benim JavaScript ben 'value1b' yaparak başvurmak çalışıyorum: json.var1[1]. FF gayet güzel bu işler. IE7 tanımsız olduğunu söyledi.

Ben yanlış ne yapıyorum? Nasıl böyle bir 2-d dizi transferi almak yok

array('var1' => array('value1a', 'value1b', 'value1c'), 
      'var2' => array('value2a', 'value2b', 'value2c'));

JSON / AJAX üzerinde? Ya da bu mümkün değil mi?

8 Cevap

Tamam, bunu anladım. Bir caching issue ama hiç bir JSON / JavaScript sorunu değildi. Ben başlangıçta test ajax.php çalışma değildi veya farklı bir JSON yapı üreten zaman IE7 test ve olması gereken bu gelişmekte zaman sonra ben yukarıdaki haberi ne test AJAX.php değişti ve benim JavaScript güncellendi AMA IE7 oldu Özgün test ajax.php alınan ne bir önbelleğe alınmış sürümünü kullanıyor. Ve bu test - IE7 önbelleğini temizleyin eğer ben IE7 önbelleğe alınan JSON yapısını kullanmaya devam JSON yapısında değerleri (ama yapının kendisi) değiştirirseniz, sonra çalışır ve.

Solution:

Ben eklendi

header("Cache-Control: no-cache, must-revalidate");
header("Expires: 0"); 

benim test-ajax.php sayfa ve bir AJAX arama yaptığında artık IE7 test ajax.php yeni bir sürümü için doğru sunucuyu kontrol ediyor.

Herkese teşekkürler!

Test-ajax.php dosyanın sonuna aşağıdaki satırı eklemeyi deneyin:

echo ';';

Ben hemen yanlış bir şey görmüyorum, ama burada denemek için bazı şeyler var

  1. Get Charles. GetJSON () çağrısından istek / yanıt bakmak. Beklendiği gibi içerik iade ediliyor? Yanıtı 200 durum kodu, ya da başka bir şey mi?
  2. IE tüm json değişken haberi olmadığını belirleyin. Bu gibi şeyler denemek için kodunuzu değiştirin

(Muhtemelen bir zamanda bu uyarılar sadece 1 çalıştırmak istiyorum)

$.getJSON("test-ajax.php", function(json){
  alert( typeof json );
  alert( typeof json.var1 );
  alert( typeof json.var1[1] );
});

IE ve ajax ile iki ortak sorunlar şunlardır:

  • önbelleğe (çözüm yukarıda bulunabilir)
  • beyaz boşluk! (Dönüş json çıktı önce / sonra herhangi bir boşluk varsa, bu IE 7 başarısız olur)

IE 8 ile aynı problem vardı. Çözümleri sadece ajaxSetup ile önbelleğini devre dışı oldu

$.ajaxSetup({
cache : false});

Bu FF ve Chrome'da çalışıyor çünkü çok can sıkıcı.

IE, IE hiçbir yerli JSON ayrıştırma olduğu gibi json2.js kütüphane dahil etmek zorunda. Ancak Firefox ve Krom sahiptir.

Böyle değeri erişmeyi deneyin eğer aynı sonuçları alır mıyım?

json["var1"][1]

... Bunun yerine:

json.var1[1]

Nesnesi değişmez özellikleri için ayrılmış sözcükleri kullanırken sorunlar çalıştırmak. Bu Firefox ve Safari'de çalışıyor ama IE'de bombalar. Burada genellikle beni gezileri biri:

{
    class : 'my-css-class'
}

Ben ilk kontrol yapardım. YMMV.