2013-05-03 1 views
16

संलग्न किए गए HTML में जावास्क्रिप्ट को निष्पादित नहीं कर रहा है। मैंने .load() और $.ajax का उपयोग करने की कोशिश की है ताकि कुछ HTML प्राप्त करने के लिए एक कंटेनर में जोड़ा जा सके, लेकिन लौटा HTML के भीतर जावास्क्रिप्ट है जब मैं इसे तत्व में जोड़ता हूं तो निष्पादित नहीं किया जा रहा है।jQuery .load()/.ajax()

.load() का उपयोग करना:

$('#new_content').load(url+' #content > *',function() { 
    alert('returned'); 
}); 

मैं भी एक $ .ajax कॉल का उपयोग करने जा कोशिश की है। इसके बाद मैंने लौटाए गए HTML से स्क्रिप्ट निकाली जिसके बाद मैंने इसे कंटेनर में जोड़ा, लेकिन एक ही समस्या, जेएस को इस मामले में निष्पादित नहीं किया जा रहा है या यहां तक ​​कि इसमें शामिल नहीं किया गया है, और जैसा कि मैं इसे समझता हूं, <script> को डोम में जोड़ने की कोशिश कर रहा हूं इस तरह का तत्व फहरा हुआ है?

$.ajax का उपयोग करना:

$.ajax({ url: url }).done(function(response) { 
    var source = $("<div>").html(response).find('#overview_script').html(); 
    var content = $("<div>").html(response).find('#content').html(); 

    $('#new_content').html(content); 
    $('<script>').appendTo('#new_content').text(source).html(); 

}); 

आदर्श रूप में मैं के बाद मैं HTML संलग्न है, लेकिन चर मूल्यों है कि एक नियंत्रक से लौटाए जाते हैं करने के लिए सेट किया जा रहा है एक कॉलबैक में इस जावास्क्रिप्ट चलाना शामिल है।

तो सारांश में, मैं कुछ HTML जो जे एस के बाद कि HTML जोड़ा जा चुका है चलाने की जरूरत है शामिल पाने के लिए कोशिश कर रहा हूँ, लेकिन मैं वापस आ एचटीएमएल या तो पर गायब हो जाता है में स्क्रिप्ट के रूप में .load() या $.ajax() का उपयोग कर कोई भाग्य पड़ा है इसे जोड़ना, या यह बिल्कुल निष्पादित नहीं करता है।

+1

उपयोग कर सकते हैं इस डेमो http://plnkr.co/edit/Hj0cyTUV44BPrxiOvPpW?p=preview –

+0

धन्यवाद, कि चाल किया कोशिश करो! – John

+0

मैं इसे उत्तर के रूप में अपडेट करूंगा –

उत्तर

22

जब load() एक खंड चयनकर्ता के साथ प्रयोग किया जाता है तो खंड को script will not get executed में विभाजित करने से पहले स्क्रिप्ट तत्व को हटा दिया जाएगा।

जब .load() कॉल एक प्रत्यय चयनकर्ता अभिव्यक्ति के बिना एक यूआरएल का उपयोग कर, सामग्री .html के लिए() पारित हो जाता है स्क्रिप्ट हटाया जा रहा से पहले। यह छोड़े जाने से पहले स्क्रिप्ट ब्लॉक निष्पादित करता है। यदि .load() को यूआरएल, में संलग्न चयनकर्ता अभिव्यक्ति के साथ बुलाया जाता है, हालांकि, डीओएम अपडेट होने से पहले स्क्रिप्ट को हटा दिया जाता है, और इस प्रकार निष्पादित नहीं किया जाता है। दोनों ही मामलों का एक उदाहरण नीचे देखा जा सकता है:

तो प्रयास करें

$.get('partial.html', function(result){ 
    $result = $(result); 

    $result.find('#content').appendTo('#new_content'); 
    $result.find('script').appendTo('#new_content'); 
}, 'html'); 

डेमो: Fiddle

+0

क्या यह jQuery v2.0.3 में काम करेगा? –

+0

@RobinMaben हां इसे –

+0

'$ (परिणाम) 'स्क्रिप्ट सामग्री को हटा देगा। या तुमने कोशिश की? –

2

कैसे इस कोड के बारे में,

$('#new_content').append($('<script>').html(source)); 

या आप बस ले जा सकते हैं अपने फ़ाइल को पृथक करने के लिए जावास्क्रिप्ट सामग्री और इसे

का उपयोग करके लोड करें
$.getScript("url to js file"); 

या बस का उपयोग करें,

eval(source); 
5

यदि आप जानते हैं स्क्रिप्ट आप पर अमल करना चाहते हैं क्या, आप ajax प्रतिक्रिया से बाहर स्क्रिप्ट कहीं और, परिभाषित कर सकते हैं, और फिर इसे कॉलबैक से कहते हैं।तो बजाय:

$('#new_content').load(url+' #content > *',function() {alert('returned');}); 

आप

$('#new_content').load(url+' #content > *',function() {my_function(my_param);}); 
+0

निश्चित रूप से काम करता है, और स्वीकार्य उत्तर से अधिक सुरक्षित है –