Ada div yang disebut "Konten":
<div id="content"></div>
Ini harus diisi dengan data dari file PHP, oleh AJAX, termasuk <script>
tag. Namun, skrip di dalam tag ini tidak sedang dijalankan.
<div id="content"><!-- After AJAX loads the stuff that goes here -->
<script type="text/javascript">
//code
</script>
<!-- More stuff that DOES work here -->
</div>
javascript
html
ajax
JCOC611
sumber
sumber
window.onload
saya membuatXMTHttpRequest
objek untuk meminta halaman (php) lain yang berisi konten div, termasuk skrip. Saya melakukan ini dengan JS biasa, tanpa perpustakaan (selain lol saya sendiri)Jawaban:
JavaScript yang dimasukkan sebagai teks DOM tidak akan dijalankan. Namun, Anda dapat menggunakan pola skrip dinamis untuk mencapai tujuan Anda. Ide dasarnya adalah memindahkan skrip yang ingin Anda jalankan ke dalam file eksternal dan membuat tag skrip saat Anda mendapatkan respons Ajax. Anda kemudian mengatur
src
atribut tag skrip dan voila Anda, itu memuat dan menjalankan skrip eksternal.Posting StackOverflow lainnya ini juga dapat membantu Anda: Dapatkah skrip disisipkan dengan innerHTML? .
sumber
$('#audit-view script').each(function (index, element) { eval(element.innerHTML); })
Saya menggunakan kode ini, ini berfungsi dengan baik
sumber
Jika Anda memuat blok skrip dalam div Anda melalui Ajax seperti ini:
... itu hanya memperbarui DOM halaman Anda, myFunction () tidak selalu dipanggil.
Anda bisa menggunakan metode callback Ajax seperti yang ada di metode ajax () jQuery untuk menentukan apa yang harus dieksekusi ketika permintaan selesai.
Apa yang Anda lakukan berbeda dari memuat halaman dengan JavaScript yang disertakan di dalamnya dari awal (yang dieksekusi).
Contoh cara menggunakan callback sukses dan callback error setelah mengambil beberapa konten:
Cara cepat dan kotor lainnya adalah menggunakan eval () untuk mengeksekusi kode skrip apa pun yang Anda masukkan sebagai teks DOM jika Anda tidak ingin menggunakan jQuery atau pustaka lainnya.
sumber
Berikut ini skrip yang akan mengevaluasi semua tag skrip dalam teks.
Panggil saja fungsi ini setelah Anda menerima HTML dari server. Berhati-hatilah: menggunakan
eval
bisa berbahaya.Demo: http://plnkr.co/edit/LA7OPkRfAtgOhwcAnLrl?p=preview
sumber
Ini 'hanya berfungsi' untuk saya yang menggunakan jQuery, asalkan Anda tidak mencoba menambahkan subset HTML yang dikembalikan XHR ke dokumen. (Lihat laporan bug ini yang menunjukkan masalah dengan jQuery.)
Berikut adalah contoh yang menunjukkannya berfungsi:
Berikut adalah persamaan di atas: http://jsfiddle.net/2CTLH/
sumber
Berikut adalah fungsi yang dapat Anda gunakan untuk mengurai tanggapan AJAX, terutama jika Anda menggunakan minifiedjs dan ingin menjalankan Javascript yang dikembalikan atau hanya ingin mengurai skrip tanpa menambahkannya ke DOM, fungsi ini juga menangani kesalahan pengecualian. Saya menggunakan kode ini di perpustakaan php4sack dan berguna di luar perpustakaan.
sumber
Jika Anda memasukkan sesuatu yang membutuhkan tag skrip, Anda mungkin mendapatkan kesalahan sintaks yang tidak tertangkap dan mengatakan token ilegal . Untuk menghindari hal ini, pastikan untuk menghindari garis miring ke depan di tag skrip penutup Anda. yaitu;
Hal yang sama berlaku untuk semua tag penutup, seperti tag formulir.
sumber
Saya memiliki posting serupa di sini, addEventListener memuat pada ajax load TANPA jquery
Bagaimana saya mengatasinya adalah dengan memasukkan panggilan ke fungsi dalam fungsi stateChange saya. Halaman yang saya siapkan adalah 3 tombol yang akan memuat 3 halaman berbeda ke dalam contentArea. Karena saya harus tahu tombol mana yang ditekan untuk memuat halaman 1, 2 atau 3, saya dapat dengan mudah menggunakan pernyataan if / else untuk menentukan halaman mana yang sedang dimuat dan kemudian fungsi mana yang akan dijalankan. Apa yang saya coba lakukan adalah mendaftarkan pendengar tombol yang berbeda yang hanya akan bekerja ketika halaman tertentu dimuat karena ID elemen ..
begitu...
jika (halaman1 sedang dimuat, pageload = 1) jalankan fungsi registerListeners1
lalu sama untuk halaman 2 atau 3.
sumber
Ini berfungsi untuk saya dengan memanggil eval pada setiap konten skrip dari ajax .done:
sumber
Kesimpulan saya adalah HTML tidak mengizinkan tag NESTED SCRIPT. Jika Anda menggunakan javascript untuk memasukkan kode HTML yang menyertakan tag skrip di dalamnya tidak akan berfungsi karena javascript juga masuk dalam tag skrip. Anda dapat mengujinya dengan kode berikutnya dan Anda akan tahu bahwa itu tidak akan berhasil. Contoh kasusnya adalah Anda memanggil layanan dengan AJAX atau yang serupa, Anda mendapatkan HTML dan ingin langsung memasukkannya ke dalam DOM HTML. Jika kode HTML yang dimasukkan ada di dalam tag SCRIPT tidak akan bekerja.
sumber
Hal lain yang harus dilakukan adalah memuat halaman dengan skrip seperti:
Ini akan memuat halaman, kemudian menjalankan skrip dan menghapus pengendali event ketika fungsi telah dijalankan. Ini tidak akan berjalan segera setelah ajax dimuat, tetapi jika Anda menunggu pengguna untuk memasukkan elemen div, ini akan bekerja dengan baik.
PS. Membutuhkan Jquery
sumber