jQuery AJAX isteği PHP istisna başarısız

6 Cevap php

Ben bir uygulama için Kohana PHP Framework kullanıyorum. Şimdi jQuery belirli bir dosyaya bir AJAX isteği yaptığında, çalışır, bir sorun haline çalıştırıyorum, fakat bu dosya, bir PHP istisna atar, jQuery başarısız olur ve dosyanın çıkışını görünmüyor.

Küçük bir örnek, bu Javascript parçasıdır:

$.post($('#' + e.currentTarget.id).attr('action'), $('#' + e.currentTarget.id).serialize(), function ( data )
{
    alert ( data );
}/*, 'json' */);

PHP dosyası (uyarı kutusu açılır) bu yaptığında artık bu işleri:

<?php echo 'Test'; ?>

Ama PHP dosyasında bir yerde bu olur:

<?php throw new Exception ( 'Test' ); ?>

jQuery başarısız olur ve outputted HTML hatayı göstermek değil, aynı zamanda (? PHP tarafından oluşturulan) PHP başlıklardaki bir fark vardır:

PHP echo (iyi):

.	Connection:Keep-Alive
.	Content-Encoding:gzip
.	Content-Length:544
.	Content-Type:text/html; charset=UTF-8
.	Date:Wed, 22 Jul 2009 14:22:43 GMT
.	Keep-Alive:timeout=15, max=100
.	Server:Apache/2.0.59 (Unix) PHP/5.2.6 DAV/2
.	Vary:Accept-Encoding
.	X-Powered-By:PHP/5.2.6

PHP hariç (başarısız):

.	Connection:close
.	Content-Encoding:gzip
.	Content-Length:1896
.	Content-Type:text/html; charset=UTF-8
.	Date:Wed, 22 Jul 2009 14:23:11 GMT
.	Server:Apache/2.0.59 (Unix) PHP/5.2.6 DAV/2
.	Vary:Accept-Encoding
.	X-Powered-By:PHP/5.2.6

Şimdi gerçekten bir sorun görmüyorum, her iki yönde PHP bazı HTML yankıları. Biri daha önce bu sorun vardı ve bunu nasıl düzeltebilirim?

Yardımın için teşekkürler!

6 Cevap

Hatanın ne olduğunu göstermek için, ajax arama yapabilirsiniz.

jQuery.ajax({
	type: "POST",
	...
	error: function(xhr, desc, e) {
	   alert(xhr.responseText);
  	}
});

Bu bir PHP istisna atıyor düzenli bir sayfada sana verecek, aynı html sizi uyarmalıdır.

Eğer mevcut hata raporlama seviyede tutmak, ama yine jQuery güzel bir hata mesajı vermek istiyorsanız bir try-catch bloğu içinde kodunuzu kaydırılabilir.

try {
  // your code
} catch(Exception $e) {
  echo $e->getMessage();  // formatted nicely or a generic message or something.
}

+1 with Brian. If you want to know the cause, here it is: jQuery is expecting to receive JSON data. When PHP outputs its error, it outputs HTML and plain text not enclosed within quotes, and this is not valid JSON, so jQuery fails.

Eğer 'json' parametresini açıklama ise hiçbir şey olmuyor eğer sunucu bir hata (herhangi statut code> 500) representig bir statut kod gönderdi, çünkü o, bu kadar. Bize bu bilgiyi sağlayabilir, bu iyi olurdu.

Firefox için Firebug addon denemek için teşvik edecek. Kundakçı kolayca AJAX isteği bakmak ve uygulama tarafından iade ediliyor verileri görmek için izin verir.

Birkaç kişi tahmin ettiğiniz gibi, Kohana varsayılan istisna işleyicisi "500 Internal Server Error" için HTTP yanıt durumunu ayarlar. Eğer JavaScript hataları dönmek isterseniz elle istisnaları ve çıkış hata iletileri yakalamak gerekir.

Goreckm Çözümü teşekkürler:

$.ajax({
    type    : 'POST',
    url     : $('#' + e.currentTarget.id).attr('action'), // http://www....
    dataType: 'json',
    data    : $('#' + e.currentTarget.id).serialize(), // Data to be sent
    success : function ( data )
    {
    	alert ( data );
    },
    error   : function ( ajax_response )
    {
    	alert ( ajax_response.responseText );
    }
});