2008-12-01 14 views
6

Kısa süre önce Winamp Song Requester yüklü bir Winamp web şarkısı eklenti eklentisi olup, en az HTTP CGI Sunucusu yerleşiktir.

Eklentinin yapması, bir web sunucusu çalıştırmasıdır, istek üzerine gerçek verilerle değiştirilen bazı özel değişkenler içeren bir html sayfası sunar (çalma listesi, istek sırası, şarkıda kalan süre vb.).

Bazı jQuery öğelerini öğrenmek için eğlenceli ve güzel bir proje olarak gördüm. Bu nedenle, kendi js kodumu takma, düzeltme ve sunulan web sitesini eklentiden ajaxify'a bağlama girişiminde bulundum ancak şimdi karakter kodlamasıyla ilgili bir sorunla karşılaşıyorum .

Sayfada, çalma listesindeki tüm şarkılara bağlantılar bulacaksınız. Bağlantılardan birine tıkladığınızda kendi jQuery tıklama işlevimi bağladım. Bu yüzden bir şarkı isteğinde bulunduğunuzda tüm sayfayı yeniden yüklemek yerine, bir $ .get ($ (this) .attr ('href', function (response) {... code ...}) yapın ve sonra replaceWith'i isteğinizle eklenen kuyruğu ile yeni kuyruğunuzdaki sıraya geçin.Görme ve oynatma için aynı şeyi yapıyorum, böylece her şey arka planda getirilir ve sonra da bazı animasyonlar eklendiğinde anında değiştirilir.

Tüm jQuery/Ajax inşaat büyük ama ben büyük bir sorun karakter seti ile ve kuyruk/çalma listesinde şarkı isimlerle olduğunu. adlarında özel karakterler (åäöé vs.) hiç çalışmıyor.

eklentisi iso-8859-1/latin1'deki her şeyi çıktılar ve işaretlemede meta etiketim tarayıcıya bu sayfanın latin olduğunu bildirir1. e tarayıcı bu iyi çalışıyor ve özel karakterler normal olarak görüntülenir. Ama jQuery ve $ .get() kullanarak kod bloklarını anında değiştirdiğimde, sadece özel karakterler görünür.

Sorunun, jQuery varsayılanlarında, $ .get() yanıtının, üstbilginin aksini belirmediği takdirde UTF-8 olduğuna inanması yatıyor. Eklenti, kodlama/karakter kümesi için herhangi bir üstbilgi ayarlamıyor ve arka uçta hiçbir denetimim olmadığından ve üstbilgileri ne ayarlayacağımdan, bunu değiştiremiyorum.

ben eklentisinden cevaben olsun sadece başlıklarının

geçerli:

Sunucu: WinampServer
Bağlantı: yakın
Content-Type: text/html

Umarım anlarsın benim sorunum. Arka uçta hiç kontrolüm olmayan bir sayfam var ve çalışmam gereken tek şey HTML. Yanıtlarda başlık değiştiremez veya ekleyemiyorum. JQuery'ye yanıtın aslında latin1'de olduğunu ve UTF-8'in değil, özel karakterlerin kodlanmasının bozulmadığını söylemeliyim. JQuerys ajaxSetup içinde scriptCharset: 'iso-8859-1' komutunu denedim, ancak sadece tip script/json ile çalışıyor ve HTML yanıtlarıyla çalışıyorum.

Bunun mümkün olup olmadığı hakkında herhangi bir fikir veya başka bir çözüm düşünebilirsiniz?

cevap

28

düzenlemek: Tamam ben bu işleri düşünmek (en azından önceki girişimi için revizyonları bakınız benim test ortamında çalışmış) i UTF-8 belirlenen ana dosya ve veri dosyası vardı ne

$.ajaxSetup({ 
    'beforeSend' : function(xhr) { 
     xhr.overrideMimeType('text/html; charset=UTF-8'); 
    }, 
}); 
$('#stuff').load('/yourresource.file'); // your ajax load 

ISO-8859-1'da ayarlayın. Yukarıdaki kod olmadan, beklediğim gibi test dizesi åäöé için bir sürü çöp aldım.Yukarıdaki kodla, åäöé doğru şekilde kodlanmış.

+0

Bunu denedim ama bu yardımcı olmadı. Ben sadece, gönderdiğiniz veri üzerindeki şifrelemeyi, yanıtta geri alınan veriyi kodlamayı değil, bence. –

+1

Bu yeni yöntemin – Owen

+0

Woah çalışması gerektiğini düşünüyorum, çok teşekkür ederim. Bu bir çekicilik gibi çalışır. Vazgeçmeye ve sorunumu çözmenin mümkün olmadığını kabul etmeye hazırdım. Farklı şeyler denemek ve bir çözüm için googling yapmak için çok zaman harcadım. Charset'i iso-8859-1'e ayarladığım zaman beforeSend'iniz harika çalıştı. –

0

Başlangıçta, daha genel $ .ajax() işlevini kullandıysanız daha iyi olurdu.

documentation belgesine göre scriptCharset seçeneği vardır, ancak yalnızca belirli veri türlerinde geçerlidir. Bunun, sadece arama sayfasının kodlanmasının farklı olması durumunda gerekli olduğu belirtilmektedir.

0

Bu, overrideMimeType() yönteminin Gecko tabanlı tarayıcılarda (Firefox, ...) kullanılabilir durumda iken, IE'de (en az < = 7) OLMADIĞINI ve geçici çözüm yok. (Diğer tarayıcılarda kullanılabilirliğini bilmiyorum.)