bir dosya olarak javascript dönüş işlevin veri

3 Cevap php

I **onlick="dumpData(dbControl);"* Ne yapar şu anda bir uyarı kutusu (ayarlar bir xml dosyası return "dumpData" ki gibi ben bir html sayfasındaki bir düğmeye çağrı denilen javascript bir işlevi var .) Ben bir dosya indirmek olarak kullanıcıya dönmek istiyorum. Tıklayın Bir dosya indirme kutusunu açmak ve kaydetmek veya açmak için kullanıcı soracaktır zaman bir düğme oluşturmak için bir yolu var mı? (Sağ-tıklayarak ve tasarrufu hedef gibi sorta) ...

Ya da bir php dosyasına gönderilen ve ben php için böyle uzun bir dize göndermek ve dosya indirme gibi geri basit send o olurdu nasıl export();? Emin değilim kullanmak olabilir.

Dennis

3 Cevap

Ben bu yolu gidiş eneded:

HTML kodu

    <script type="text/javascript">

        $(document).ready(function() {

            $("#save").click(function(e) { openDialog() } );
            });


    </script>

<button id="save" >Send for processing.</button>

Javascript kodu:

function openDialog() {

    $("#addEditDialog").dialog("destroy");
    $("#Name").val('');
    $("#addEditDialog").dialog({
        modal: true,
        width: 600,
        zIndex: 3999,
        resizable: false,
        buttons: {
            "Done": function () {
                var XMLname = $("#Name").val();
                var XML = dumpXMLDocument(XMLname,geomInfo);
                var filename = new  Date().getTime();
                $.get('sendTo.php?' + filename,{'XML':XML}, function() {
                    addListItem(XMLname, filename + ".XML");
                });
                $(this).dialog('close');
            },
            "Cancel": function () {
                $("#Name").val('');
                $(this).dialog('close');
                //var XMLname = null;
            }
        }

    });

    }

PHP kodu, sadece bir dizine dışarı dosyayı yazmaya karar verdim. Ben javascript dosya oluşturulan ve PHP geçti bu yana, dosya olduğunu ve nerede olduğunu biliyordu, bu yüzden dosyasına bir bağlantı ile bir yan panel nüfuslu.

<?php    
    if(count($_GET)>0)
    {
        $keys = array_keys($_GET);
        // first parameter is a timestamp so good enough for filename    
        $XMLFile = "./data/" . $keys[0]  . ".kml";
        echo $XMLFile; 
        $fh = fopen($XMLFile, 'w');
        $XML = html_entity_decode($_GET["XML"]);
    $XML = str_replace( '\"', '"', $XML );
        fwrite($fh, $XML);
        fclose($fh);        
    }   
    //echo "{'success':true}"; 
    echo "XMLFile: ".$XMLFile;
?>

Nedenini bilmiyorum, ama benim php dosyasına XML göndermek zaman içeriğini withs tüm qoutes ve çift tırnak üzerinde kiralamada kaçış yazdı. Yani düzgün bir xml dosyasını biçimlendirmek için bir str_replace yapmak zorunda. Bu durumda neden herkes biliyor musun?

Ben en azından güzel bir çözüm ile, JavaScipt'i ile bunu yapabileceğimi sanmıyorum.

Burada PHP bir dosya indirme zorlamak için nasıl:

$file = "myfile.xml";
header('Content-Type: application/xml');
header("Content-Disposition: attachment; filename='$file'");
header('Content-Length: ' . filesize($file));
readfile($file);
exit;

Bunun yerine readfile çıkışına dosyanızı kullanarak, aynı zamanda doğrudan echo kullanarak içerik görüntüleyebilirsiniz.

/ EDIT: cehennem, birisi hızlı oldu :).

EDITED:

Sadece bir kavram kanıtı .. ama fikir olsun!

yerine

<a onlick="dumpData(dbControl); href="#">xml file</a>

Eğer bu gibi olabilir:

<a  href="foo/bar/generate_xml.php?id=1">xml file</a>

sonra bu gibi:

// Assuming your js dumpData(dbControl); is doing the same thing, 
// retrieve data from db!

$xml = mysql_query('SELECT * FROM xml WHERE id= $_GET['id'] ');
header("Content-type: text/xml");
echo $xml;

POST Content-Disposition: attachment; filename=xxx.xml başlığı ile geri istemci yazar bir php komut dosyası için bir form aracılığıyla XML.

<form name="xml_sender" action="i_return_what_i_was_posted.php" method="POST">
<input type="hidden" name="the_xml" value="" />
</form>

Sonra js ile

function dumpData(arg) {
  var parsedXML = ??? //whatever you do to get the xml
  //assign it to the the_xml field of the form
  document.forms["xml_sender"].the_xml.value = parsedXML;
  //send it to the script
  document.forms["xml_sender"].submit();
}

Eğer öyleyse, bu, orijinal pencere kaybederse hatırlamıyorum, post to an iframe.