jQuery ajax satırlı "script"

4 Cevap php

Ben bir jQuery Ajax isteği kullanan bir şablon oluşturma aracı, tasarlama bir PHP dosyası ile mesaj parametreler olduğunu. PHP şablonun HTML gerçek nesil yapar.

// Send for processing. Expect JS back to execute.
function generate() {
$.ajax({
    type: "POST",
    url: "generate.php",
    data: $('#genform :input').serialize(),
    dataType: "script",
    beforeSend: function() {
        $("#loading").html("<img src='images/loadbar.gif' />");
        $("#loading")           
        .dialog({
            height: 80,
            width: 256,
            autoOpen: true,
            modal: true
        });
    },
    success: function(data) {
        $("#loading").dialog('close');
    }
});
}

"Script" olarak ayarlandığında: Benim sorunum ajax dataType olması. Bunu kullanarak, PHP dosyası güzel çalışıyor herhangi bir hata için bazı jQuery diyaloglar oluşturur. Ben HTML üretir Ancak, sonra, ben sorun geri geçirerek yaşıyorum.

So I have probably 100 lines of generated HTML and javascript which i'd like to work with. In the PHP file, i've tried:

echo('$("#result").html("'.$html.'");');

$ Html NO satır sonları varsa bu aslında çalışır. En kısa sürede herhangi bir satır sonları olduğu gibi, Chrome hata ayıklayıcı raporları "gen.html: 1 yakalanmamış SyntaxError: Unexpected belirteci YASADIŞI". Bu iade yanıt başlıklarını eval çalışıyor açıktır, ancak herhangi bir satır sonunda durduruluyor.

Içeriği bu ise ben, geri $ html geçirdiğinizde Yani, açık olması için:

$html = "<div>hi there</div>";

Bu (benim hata mesajı diyaloglar hepsi tek bir çizgi vardır) çalışıyor. Ama eğer o var:

$html = "<div>
           hi there
         </div>";

Bu darbeler.

Ben gerçekten bu çevrede nasıl emin değilim, ya da bu konuda gitmek için daha iyi bir yolu varsa. İnsanların HTML şablonu kopyalayın böylece biçimlendirme tutmak benim için önemli.

Ben sadece yıkmak ve ben bu çözemezseniz PHP sayfasındaki şablon dosyasını görüntülemek, ama gerçekten HTML sayfasının sınırları içinde her şeyi tutmak için umuyordum olabilir.

4 Cevap

Diğer basit yolu (similar to the xml solution) bir nesne olarak kodlanmış bir JSON yanıt sahip olmaktır. Bu doğal aslında sizin için de JSON çözer jQuery tarafından desteklenmektedir. Bu kullanımını içerir:

  1. Yerine dataType: "script" ile datatype: "json"
  2. Html değiştirme yapmak için başarı işlevini değiştirmek.
  3. PHP değiştirmek için sadece çıkış json_encode($html);

İşte değiştirilen başarı fonksiyonu bulunuyor

success: function(data) {
    $("#loading").dialog('close');
    $("#result").html(data.result_html);
}

İşte değiştirilen PHP fonksiyonu var:

echo json_encode(array('result_html' => $html));

Ben gelecekte JSON çıkış için ekstra verileri ekleyebilirsiniz böylece HTML doğrudan çıkışı tercih, ama aynı zamanda sadece PHP echo json_encode($html); ile $("#result").html(data); yapabilirsiniz

Yanıtı değerlendirilmez, böylece 'metin' ya da 'xml' için dataType değiştirebilirsiniz.

dataType: ($.browser.msie) ? "text" : "xml",

Sen javascript kodu kırmak her şeyi kaçmak zorunda:

$ Html = str_replace (array ('\ \', "\ r", "\ n", '"'), array ('\ \ \ \', '\ r', '\ n', '\'" ), $ html);

echo ('".. $ html'". $ ("# sonuç") html (');');

Çıkış işleyici işlevi oluşturmak deneyin:

function ob_handler($string, $flags) {
    return nl2br($string);
}

Veya:

function ob_handler($string, $flags) {
    $string = str_replace(array("\r", "\n"), array('', ''), $string);
    return $string;
}

Ve sonra o senin kodu kullanabilirsiniz:

ob_start('ob_handler');
/// all your code here
ob_end_flush();