2008-09-29 18 views
31

kullanarak Excel verilerini göndermek için kullanın Veritabanından veri çeken aşağıdaki işleve sahibim. Ajax çağrısı doğru çalışıyor. Sekme ile ayrılmış verileri başarı işlevimde kullanıcıya nasıl gönderebilirim? Contect tipinin "application/vnd.ms-excel" e ayarlanması işe yaramadı. Başarı uyarısı doğru biçimlendirilmiş verileri gösterir.JQuery'yi, AJAX

 function SendToExcel() { 
     $.ajax({ 
      type: "GET", 
      url: "/Search.aspx", 
      contentType: "application/vnd.ms-excel", 
      dataType: "text", 
      data: "{id: '" + "asdf" + "'}", 
      success: function(data) { 
       alert(data); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       alert(jqXHR.responseText); 
     }}); 
    } 

Verileri tarayıcıda görüntülemek istemiyorum - Excel'e göndermek istiyorum.

DÜZENLEMEK: İstediğim şeyi yapmanın bir yolunu buldum. Kullanıcıları bir Excel dosyasını kaydetmeye/açmaya yönlendirecek yeni bir sayfaya yönlendirmek yerine, sayfayı gizli bir iframe içinde açtım. Bu şekilde, kullanıcılar bir düğmeyi tıklar ve bir Excel dosyasını kaydetmeleri/açmaları istenir. Sayfa yönlendirmesi yok. Ajax mı? Hayır, ama sahip olduğum gerçek problemi çözüyor.

 function SendToExcel() { 
     var dataString = 'type=excel' + 
      '&Number=' + $('#txtNumber').val() + 
      '&Reference=' + $('#txtReference').val() 

     $("#sltCTPick option").each(function (i) { 
      dataString = dataString + '&Columns=' + this.value; 
     }); 

     top.iExcelHelper.location.href = "/Reports/JobSearchResults.aspx?" + dataString;; 
    } 
+2

Bunun herhangi bir nedeni, bunun kötü bir sorudur? Neden bu oy kullanıldı? – Jim

+0

aşağı oy aldı çünkü büyük olasılıkla herkes AJAX'ın isteğinin kötü bir yaklaşım olduğuna inanıyor, ancak gizli bir iframe ile indirme diyaloğunu gelmek mümkün. Her tarayıcıda farklı sonuçlar almanıza rağmen. Ben sorunları olan IE olduğunu hatırlıyorum. ama gizli iframe yaklaşımı işe yarıyor - bunu onaylayabilirim. – IEnumerator

cevap

13

AJAX olduğunu ... yanlış seçim:

Burada düğmesi tıklandığında arıyorum fonksiyondur. Kullanıcıyı verileri doğru MIME türüyle gönderecek bir sunucu kaynağına yönlendirin ve tarayıcının bununla ne yapacağını anlamasına izin verin.

+0

@ Shog9 Lütfen (yanlış) seçimini (teknik) nedenlerle açıklayınız. – LosManos

2

JavaScript'i kullandığından, AJAX, JavaScript'in istemcinin makinesindeki diğer işlemlerle etkileşime girmeyi de içeren tasarlanmış sınırlamalarına bağlıdır. Bu durumda, iyi bir şey; Bir sitenin bir Excel belgesini otomatik olarak zararlı bir makroyla yükleyebilmesini istemezsiniz.

Verileri tarayıcıda görüntülemek isterseniz, AJAX kullanabilirsiniz; Aksi takdirde, bir Excel belgesine bir link vermek ve tarayıcının normal yükleme işleme yeteneklerinin ne yapması gerektiğini belirlemesini isteyeceksiniz.

0

Bunu javascript ile yapmak istemediğiniz olasıdır.

Yapmak istediğinizi düşündüğüm kişi, uygulama/csv türüyle birlikte bir yanıt sayfası oluşturmak ve kullanıcıyı bu sayfaya yönlendirmektir. Kullanıcı şu anda üzerinde bulunduğu sayfayı kaybetmediğinden muhtemelen bir window.open() yapıyorum. bir şeye tepki

function exportExcel(){ 
    var inputs = $("#myForm").serialize(); 
    var url = '/ajaxresponse.php?select=exportExcel&'+inputs; 
    location.href = url; 
} 

ve son olarak bir mil dosyasında: HTML

5

Ben seri girişler elemanları ile Form ve JavaScript dosyasında sonra bir JavaScript fonksiyonunu onclick="exportExcel();


çağıran bir düğme vardır

PHP kodu:

case 'exportExcel':{ 
        ob_end_clean(); 
        header("Content-type: application/vnd.ms-excel"); 
        header("Content-Disposition: attachment; 
        filename=exportFile.xls"); 
        echo $html->List($bd->ResultSet($_GET)); 
       } 

$ html, html'yi işleyen bir nesnedir ve $ bd, Veri 'dan kendi veri tablolarınızı veya istediğiniz her şeyi gönderen bir nesne döndürür.