Bir yükleme olarak nasıl kullanıcıya Ajax POST tepki veriyorsunuz?

4 Cevap php

Ben hesap bilgi dolu varolan sayfasında bir vCard ihracat işlevi içeren çalışıyorum.

Çirkin yöntemleri işlenmesi ve tüm sayfayı, ya da 2, sayfada bir iframe hedefleyen bir GET yeniden oluşturma, aynı sayfaya bir form göndererek, 1 içerecektir. Ben gerçekten bu iki önlemek istiyorum, ama hedefe ulaşmak için 2. kullanmak zorunda kalabilirsiniz.

Şu anda var:

<input type="image" src="/intra/imgs/icons/vcard.png" onclick="$.post('/intra/vcard.php', { id: '992772', type: 'sponsor'});">

Hangi ben Firebug XHR etkinliği izlemek eğer ben istek vCard biçimlendirilmiş verilerin tam doğru yanıt, geri gelip görmek bu anlamda çalışır. Ancak kart ile gönderilir olsa bile, bir dosya olarak tepkisini indirmek için kullanıcı sormaz:

header('Content-Type: text/x-vcard');
header("Content-Disposition: attachment; filename={$this->name_first}{$this->name_last}.vcf");

Ben yanlış bir şey yapıyorum, ya da bu sadece mümkün değil mi?

4 Cevap

Ben sorunun tam olarak ne olduğu konusunda kafam karıştı. Neden sadece böyle bir şey yapamaz:

<input type="image"
       src="/intra/imgs/icons/vcard.png"
       onclick="window.location='/intra/vcard.php?id=992772&type=sponsor';">

Ve daha sonra uygun indir başlıklarını dönmek vcard.php? Tarayıcı bu aldığında, aynı sayfada kalmak ve indirmek için isteyecektir. Sen $_GET yerine $_POST olarak değişkenleri işlemek için kodunuzu değiştirmek zorunda olacak ama neyse bunun için GET kullanarak yapılmalıdır.

Açıklamalarda belirttiği gibi EDIT, hatta daha uygun bunu olacaktır:

<a href="/intra/vcard.php?id=992772&type=sponsor"><img src="/intra/imgs/icons/vcard.png"></a>

Gibi o zaman javascript engelli kullanıcılar için erişilebilir olacaktır.

Evet, XHR'de bir indirme tetikleyebilir olamaz. Bulduğum tek yolu bir iframe kullanmak seçeneği # 2.

Belki bir jquery eklentisi (Ben jquery kullanarak konum varsayarak) sadece bu amaç için bir overkill, ama this sizin için kullanım olabilir.

dosya '{$ this-> name_first} {$ this-> name_last}. vcf') geçerli ve kundakçı olarak http-tepki olmadığını kontrol edin! (Sekme ağ, tepki üzerine tıklayın).

is the content there and correct?
is the content-length correct? what about the http-status?

Yazılan sırasında size içerik üretmek, o içeriğe yönlendirme.