Neden $. GetJSON yanıt verileri null?

3 Cevap php

Ben çalışma almak için görünmüyor olabilir çok basit bir kurulum var. Ben sadece bir oturum başlatır ve çıkış JSON durumu ve session id gerekiyordu basit bir PHP sayfası var. Ancak, ajax çağrısı döndürür, veri her zaman sıfırdır. Firebug kullanıyorum, ve ben ajax işlevi benim geri arama çağırarak görebilirsiniz.

Burada sunucu üzerinde PHP sayfası:

<?php
    try
    {
        if(!session_start()) {
            throw new Exception("unable to start session");
        }

        echo json_encode(array(
                "status" => "success",
                "session_id" => session_id()
            ));
    }
    catch(Exception $e)
    {
        echo json_encode(array(
            "status" => "fail",
            "error" => $e->getMessage()
        ));
    }
?>

Gayet iyi çalışıyor ve böyle bir şey çıktılar:

{"Status": "başarı", "session_id": "i3cdogb9jgd6oudar104qfuih1"}

HTML sayfası gibi basit:

<html>
<head>
<script src="jquery-1.4.1.min.js" type="text/javascript"></script>
<title>getJSON example</title>
    <script type="text/javascript">


        $(document).ready(function() {

            $.ajax({
                url: "http://webserver/init.php",
                dataType: 'json',
                success: function(json) {
                    if(json.status === "success"){
                        $("#session_key").val(json.session_id);
                    }
                }
            });
        });


    </script>
</head>
<body>
<input type="hidden" id="session_key"/>
</body>
</html>

Additional Information

Talep Başlıkları:

GET /init.php HTTP/1.1
Host: ir-6483
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: null

Yanıt Başlıkları:

HTTP/1.1 200 OK
Date: Mon, 01 Feb 2010 16:50:11 GMT
Server: Apache/2.2.14 (Win32) PHP/5.2.12
X-Powered-By: PHP/5.2.12
Set-Cookie: PHPSESSID=i033rd4618o18h3p5kenspcc35; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 101
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

Yani, PHP oturum kimliği ayarlanmış olduğunu görebilirsiniz, ancak yanıt sekme boş.

3 Cevap

Ben (kısa cevap için kalın metin atlayın) sorunu buldum.

Benim masaüstünde bir. Html dosyası oluşturma ve LAN benim dev sunucu PHP parçacığını yükleyerek benim makinede örnek çalıştı. Bu bana da Firefox (v3.5.7) ile sizinle aynı sonuçları verdi.

Ben bir PHP adam (daha fazla Python / Django) değilim ama bazı temel PHP biliyorum ve kod bana iyi baktı. PHP / JSON / Ajax örnek arayışı çok google'da ile onaylamıştır. Ben onun önbellek seçeneklerden bazıları değişen ve çeşitli farklı seçenekler çalışıyor dahil PHP ve JQuery farklı yöntemlerle çeşitli önbelleğe alma başlık seçenekleri, tavsiye dahil forumlarda verilen her seçeneği denedim. Fark yok.

Hiçbir sevinç - Ben tamamen anlamıyla sadece başka Koşullamalar veya kontrol yapıları olmadan, bir tek madde JSON dizi dönmek için PHP basitleştirilmiş.

Sonunda çaresiz var ve IE 8 aynı dosyayı çalıştı. Çalıştı! Safari'de denedim - bu çalıştı!

Daha sonra paranoyak var ve ben tamamen benim Firefox geçmişi temizlenir ve tarayıcı yeniden başlatıldığında bu yüzden Firefox veya başka bir gariplik bazı yapışkan oturum sorunları olabileceğini düşündüm. Fark yok.

Bu, en azından bana, diğerleri aynı problem vardı görmek için Google'dan ne olabilir farklı bir açı verdi. Gerçekten de onlar vardı.

Bu if you are running the HTML file containing the Ajax on your local machine, i.e. with a "file://" prefix, Firefox for some reason will not make the Ajax calls correctly. Ben PHP dosyası olarak aynı yerde, benim dev sunucuya dosyasını kopyaladığınız (ama yine Ajax URL olarak tam adresini kullanarak) ve emin yeterli o amele çıkıyor!

Ben tam Firefox farklı gerçekten yerel dosyaları ve Ajax ile ne anlamıyorum, ama dışarıda ışık oluyor ve ben şu anda araştırmak olamaz. Ben güvenlik ile ilgili ayarları aracılığıyla benziyordu ama ortada hiçbir şey bana dışarı fırladı. Ben bu dev ortamı kurmak nasıl sığar bilmek çok ilgi duyarım. Ben bir şans ve bu cevap güncellemek eğer ben daha sonra araştıracağız.

": Config about" cevabını içerebilir bazı veya başka bir seçenek varsa ben şaşırmam.

Ben (tam aynı sunucu ve dizin varsayarak), ve örnek mükemmel çalıştı basitçe 'init.php' için init.php sadece çağırma değiştirme, örnek HTML ve Javascript kopyalandı. Ne istek yapılıyor ve tepki ne olduğunu görmek için Firebug net sekmesini kontrol çift gerekiyor demektir yayınlanan koduyla doğal olarak yanlış bir şey yoktur. Ayrıca her şeyin çalıştığından emin olana kadar metin için gizli giriş türünü değiştirmek. Eğer sonuçtaki değeri aramak için "Kaynağı Görüntüle" kullanıyorsanız sayfa yüklendiğinde zaman değeri yoktu çünkü, bunu görmeyeceksiniz. Eğer will gizli değişkeni içinde AJAX sonuçlarını göstermek Firefox Web Developer plugin yüklü yapabilirsiniz "Görünüm Oluşturulan Kaynak", varsa.

Kırbaçlatıldı yakalanma riski az, size belge BAŞ dahil jquery.js sahip görünmemektedir:

<script type="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>

EDIT:

Ben sadece durumda, sunucudan çıktısını almadan bir Content-Type üstbilgisi ayarı denemek istiyorum:

header('Content-type: application/json');