jQuery। लोड () कॉल लोड HTML फ़ाइल में जावास्क्रिप्ट निष्पादित नहीं करता है


83

यह केवल सफारी से जुड़ी समस्या प्रतीत होती है। मैंने 4 पर कोशिश की है MAC और 3 पर Windows और अभी भी कोई भाग्य नहीं है।

मैं एक बाहरी HTML फ़ाइल को लोड करने की कोशिश कर रहा हूं और जावास्क्रिप्ट है जो एम्बेडेड निष्पादन योग्य है।

मैं जिस कोड का उपयोग करने की कोशिश कर रहा हूं वह यह है:

$("#myBtn").click(function() {
    $("#myDiv").load("trackingCode.html");
});

trackingCode.html इस तरह दिखता है (अब सरल है, लेकिन एक बार विस्तार होगा / अगर मुझे यह काम मिलता है):

<html>
<head>
    <title>Tracking HTML File</title>
    <script language="javascript" type="text/javascript">
        alert("outside the jQuery ready");
        $(function() {
            alert("inside the jQuery ready");
        });
    </script>
</head>

<body>
</body>
</html>

मैं IE (6 और 7) और फ़ायरफ़ॉक्स (2 और 3) में दोनों अलर्ट संदेश देख रहा हूं। हालाँकि, मैं सफ़ारी में संदेश नहीं देख पा रहा हूँ (अंतिम ब्राउज़र जिसे मुझे प्रोजेक्ट आवश्यकताओं के साथ - कृपया कोई लौ युद्धों से संबंधित होना चाहिए)।

सफारी में कोई विचार क्यों trackingCode.htmlफ़ाइल में जावास्क्रिप्ट की अनदेखी कर रहा है ?

आखिरकार मैं trackingCode.htmljQuery के तैयार कॉल के भीतर उपयोग होने वाली इस फ़ाइल में जावास्क्रिप्ट ऑब्जेक्ट्स को पास करने में सक्षम होना चाहूंगा , लेकिन मैं यह सुनिश्चित करना चाहूंगा कि यह उस सड़क से नीचे जाने से पहले सभी ब्राउज़रों में संभव है।

जवाबों:


56

आप अपने div में एक संपूर्ण HTML पेज लोड कर रहे हैं, जिसमें html, सिर और बॉडी टैग शामिल हैं। यदि आप लोड करते हैं और HTML में आपके द्वारा लोड की गई स्क्रिप्ट, क्लोजिंग स्क्रिप्ट और जावास्क्रिप्ट कोड होता है तो क्या होता है?

यहाँ ड्राइवर पृष्ठ है:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>jQuery Load of Script</title>
        <script type="text/javascript" src="http://www.google.com/jsapi"></script>
        <script type="text/javascript">
            google.load("jquery", "1.3.2");
        </script>
        <script type="text/javascript">
            $(document).ready(function(){
                $("#myButton").click(function() {
                    $("#myDiv").load("trackingCode.html");
                });
             });
         </script>
    </head>
    <body>
        <button id="myButton">Click Me</button>
        <div id="myDiv"></div>
    </body>
</html>

यहाँ ट्रैकिंग की सामग्री है।

<script type="text/javascript">
    alert("Outside the jQuery ready");
    $(function() {
        alert("Inside the jQuery ready");
    });
 </script>

यह सफारी 4 में मेरे लिए काम करता है।

अपडेट: मेरे परीक्षण वातावरण पर कोड से मिलान करने के लिए DOCTYPE और html नामस्थान जोड़ा गया। फ़ायरफ़ॉक्स 3.6.13 और उदाहरण कोड कार्यों के साथ परीक्षण किया गया।


1
मिल गया, धन्यवाद टोनी! <Html>, <head> और <body> टैग हटाकर ट्रिक करने के लिए लग रहा था।
माइक

1
मैं भटक रहा था कि क्या मैं एक अलग ajax कॉल getJson () करना चाहिए क्योंकि मैंने यह सुना है .. लेकिन अगर यह काम करता है कि यह ठीक है !! मैं एक ही प्रश्नों को दो बार अन्यथा कॉल
करूंगा

2
आपका कोड वास्तव में FF (IE8 - ठीक काम) में काम नहीं कर रहा है। क्या सभी ब्राउज़रों में यह काम करने का कोई तरीका है? धन्यवाद

1
@ मैक्सीम गालुश्का मेरे पास अभी भी ये फाइलें मेरे निजी कार्य केंद्र में थीं। संशोधन के बिना, उन्होंने सही व्यवहार का उत्पादन किया। मैं विंडोज 7. पर
टोनी मिलर

41
$("#images").load(location.href+" #images",function(){
    $.getScript("js/productHelper.js"); 
});

इसने मेरे लिए चाल चली। यहाँ एक उदाहरण है जिसे आप आज़मा सकते हैं: var frmAc शैक्षणिकCalendar = "frmAc शैक्षणिकCalendar.aspx" यदि (window.location.href.toLowerCase) ()। IndexOf (frmAc शैक्षणिकCalendar.toLowerCase) ()> = 0) {$ ("#eeCMSContent)। लोड (" example.com #externalContent", function () {$ .getScript ("example.js");})); }
इवान

25

जॉन पिक के समाधान का एक अन्य संस्करण ठीक पहले, यह मेरे लिए ठीक काम करता है:

jQuery.ajax({
   ....
   success: function(data, textStatus, jqXHR) {
       jQuery(selecteur).html(jqXHR.responseText);
       var reponse = jQuery(jqXHR.responseText);
       var reponseScript = reponse.filter("script");
       jQuery.each(reponseScript, function(idx, val) { eval(val.text); } );
   }
   ...
});

2
यह सबसे अच्छा उपाय है!, I love you @Yannick, आपने मेरा दिन बना दिया
utiq

15

मुझे लगता है कि यह कुछ हद तक एक पुरानी पोस्ट है, लेकिन इस पेज पर आने वाले किसी भी व्यक्ति के लिए एक समान समाधान की तलाश है ...

http://api.jquery.com/jQuery.getScript/

jQuery.getScript( url, [ success(data, textStatus) ] )
  • url - एक स्ट्रिंग जिसमें URL भेजा जाता है जिसमें अनुरोध भेजा जाता है।

  • success(data, textStatus) - एक कॉलबैक फ़ंक्शन जिसे अनुरोध सफल होने पर निष्पादित किया जाता है।

$.getScript('ajax/test.js', function() {
  alert('Load was performed.');
});

11

यदि आप HTML फ़ील्ड को गतिशील रूप से बनाए गए तत्व में लोड कर रहे हैं तो यह काम नहीं करता है।

$('body').append('<div id="loader"></div>');
$('#loader').load('htmlwithscript.htm');

मैं फ़ायरबग डोम को देखता हूं और इसमें कोई स्क्रिप्ट नोड नहीं है, केवल HTML और मेरा सीएसएस नोड।

इस पार कोई आया है?


मुझे html लोड करना था, फिर कॉलबैक में, जावास्क्रिप्ट प्राप्त करने के लिए $ .getScript का उपयोग करें।
डेक्स

1
Dude! आपने लगभग 8 साल पहले मेरी समस्या का समाधान किया।
साभार

3

आपने लगभग पा लिया है। बताओ कि आप केवल स्क्रिप्ट लोड करना चाहते हैं:

$("#myBtn").click(function() {
    $("#myDiv").load("trackingCode.html script");
});

7
लेकिन यह केवल लोड और स्क्रिप्ट के लिए लगता है। आप इसे html सामग्री लोड करने और इसमें जो भी जावास्क्रिप्ट शामिल कर सकते हैं, उसे कैसे प्राप्त करेंगे?
ThatAintWorking


2

ट्रैकिंगकोड पृष्ठ में इसके साथ परीक्षण करें:

<script type="text/javascript">

    $(function() {

       show_alert();

       function show_alert() {
           alert("Inside the jQuery ready");
       }

    });
 </script>

1

मैं इसमें भाग गया, जहां स्क्रिप्ट एक बार लोड होगी, लेकिन बार-बार कॉल करने से स्क्रिप्ट नहीं चलेगी।

यह एक। इंडीकेटर का उपयोग करने के लिए .html () के साथ एक इश्यू इंडिकेटर और फिर चेनिंग।

// Processes scripts as expected once per page load, but not for repeat calls
$("#id").html("<img src=wait.gif>").load("page.html");

जब मैंने उन्हें अलग-अलग कॉल किए, तो मेरी इनलाइन स्क्रिप्ट हर बार उम्मीद के मुताबिक भरी हुई थी।

// Without chaining html and load together, scripts are processed as expected every time
$("#id").html("<img src=wait.gif>");
$("#id").load("page.html");

आगे के शोध के लिए, ध्यान दें कि .load () के दो संस्करण हैं

एक साधारण .लोड () कॉल (url के बाद एक चयनकर्ता के बिना) केवल $ $ .ajax () के साथ डेटाटाइप के लिए एक शॉर्टहैंड है: "html" और रिटर्न सामग्री और कॉल .html () उन सामग्रियों को DOM में डालने के लिए। । और डेटाटाइप के लिए प्रलेखन: "html" में स्पष्ट रूप से कहा गया है "शामिल किए गए स्क्रिप्ट टैग का मूल्यांकन किया जाता है जब डोम में डाला जाता है।" http://api.jquery.com/jquery.ajax/ तो .load () आधिकारिक तौर पर इनलाइन स्क्रिप्ट चलाता है।

एक कॉम्प्लेक्स। लोड () कॉल में एक चयनकर्ता होता है जैसे कि लोड ("पेज.html #content")। जब इस तरह से उपयोग किया जाता है, तो jQuery उद्देश्यपूर्ण रूप से स्क्रिप्ट टैग को फ़िल्टर करता है जैसे कि इस तरह के लेखों में चर्चा की गई है: https://forum.jquery.com/topic/the-load-function-and-script-blocks#14737000000752785 इस मामले में स्क्रिप्ट कभी नहीं भागो, एक बार भी नहीं।


0

वैसे मुझे वही समस्या थी जो केवल फ़ायरफ़ॉक्स के लिए प्रतीत होती थी, और मैं लोड () को छोड़कर एक और JQuery कमांड का उपयोग नहीं कर सकता था (क्योंकि मैं एक्सिसिटिंग PHP फ़ाइलों पर फ्रंट-एंड को संशोधित कर रहा था ...

वैसे भी, .load () कमांड का उपयोग करने के बाद, मैंने अपने JQuery स्क्रिप्ट को बाहरी HTML के भीतर एम्बेड किया था जो लोड हो रहा था, और यह काम करने लगा। मुझे समझ में नहीं आता कि जेएस जिसे मैंने मुख्य दस्तावेज़ के शीर्ष पर लोड किया था, हालांकि नई सामग्री के लिए काम नहीं किया ...


आसान है, क्योंकि स्क्रिप्ट निष्पादित होने पर नई सामग्री नहीं थी।
मट्टियो

0

मैं बदल कर इस समस्या को हल करने में सक्षम था $(document).ready()करने के लिए window.onLoad()


0

@Efreed उत्तर पर टॉकिंग ...

मैं .load('mypage.html #theSelectorIwanted')चयनकर्ता द्वारा एक पृष्ठ से सामग्री को कॉल करने के लिए उपयोग कर रहा था , लेकिन इसका मतलब है कि यह इनलाइन स्क्रिप्ट के अंदर निष्पादित नहीं करता है।

इसके बजाय, मैं अपना मार्कअप बदलने में सक्षम था, ताकि '#theSelectorIwanted'यह खुद की फाइल बन जाए और मैंने इसका इस्तेमाल किया

load('theSelectorIwanted.html`, function() {}); 

और यह इनलाइन स्क्रिप्ट को ठीक-ठाक चला।

हर किसी के पास वह विकल्प नहीं है, लेकिन मैं जहां चाहता था, यह पाने के लिए एक त्वरित समाधान था!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.