2010-04-20 14 views
9

मैं एक div अद्यतन करने के लिए एक AJAX विधि बुला रहा हूँ। इसमें लिंक और फ़ंक्शन शामिल हैं जिन्हें जावा स्क्रिप्ट फ़ाइलों की आवश्यकता होती है। लेकिन इन तरीकों और कार्यों को ठीक से नहीं बुलाया जा रहा है क्योंकि जावा स्क्रिप्ट फाइलें अजाक्स कॉल के माध्यम से शामिल नहीं हो रही हैं। उदाहरण के लिए, मैं एक लाइट बॉक्स फ़ंक्शन कॉल करने का प्रयास कर रहा हूं, लेकिन यह अलग-अलग पृष्ठ पर रीडायरेक्ट हो जाता है, न कि प्रकाश बॉक्स में।AJAX कॉल में जेएस फ़ाइल कैसे शामिल करें?

अग्रिम धन्यवाद, Anubhaw प्रकाश

+1

मेरा एक समान सवाल था, बहुत पहले नहीं, कि मुझे एक जवाब मिला, जहां मैं jQuery लोड करने की कोशिश कर रहा था। इसमें जानकारी आपकी मदद कर सकती है? http://stackoverflow.com/questions/3129451/load-jquery-in-a-js-then-execute-a-script-that-depends-on-it – jasonpgignac

उत्तर

0

मैं तुम पर रूबी उपयोग कर रहे हैं   — इसका मतलब यह है कि आप ग्राहक पर प्रोटोटाइप का उपयोग कर रहे हैं? यदि ऐसा है, तो प्रोटोटाइप का Ajax.Updater बाहरी फ़ाइलों का संदर्भ देने वाले स्क्रिप्ट टैग को अनदेखा कर देगा (यह स्क्रिप्ट टैग का मूल्यांकन करेगा जिसमें उनकी सामग्री इनलाइन है)। तो उन बाहरी फ़ाइलों को अपने पृष्ठ पर जोड़ने के लिए, आपको onSuccess कॉलबैक के माध्यम से प्रक्रिया में हुक करना होगा, src विशेषताओं वाले स्क्रिप्ट टैग के लिए responseText देखें, और स्वयं को संभालें। एक बार जब आप प्रासंगिक स्क्रिप्ट टैग की पहचान कर लेते हैं और src विशेषताओं को निकालने के बाद, आप उन्हें अनधिकृत प्रोटोटाइप & script.aculo.us विकी से this article में वर्णित स्क्रिप्ट को गतिशील रूप से जोड़कर शामिल कर सकते हैं।

+0

हाय क्रॉडर, उत्तर के लिए धन्यवाद। मैंने आलेख में दिए गए कोड को आजमाया, लेकिन AJAX कॉल में अभी भी जेएस फाइलें शामिल नहीं हैं। यह

0

<script>innerHTML पर लिखे गए टैग लिखने के समय निष्पादित नहीं किए जाते हैं। आप उन्हें पकड़ने और मैन्युअल रूप से अपनी स्क्रिप्ट निष्पादित करने के लिए element.getElementsByTagName('script') कर सकते हैं, लेकिन यह बहुत बदसूरत और विश्वसनीय नहीं है।

तत्व innerHTML पर लिखे गए तत्व के साथ क्या करने के लिए कठिन ब्राउज़र अंतर है जो दस्तावेज़ में फिर से डाला गया है (सीधे या पूर्वजों के माध्यम से)। आप इस तरह की चीज़ से बचना चाहते हैं: बस <script> से innerHTML पर लिखें।

फिर आपको स्क्रिप्ट को दो बार निष्पादित करने की चिंता करने की भी आवश्यकता नहीं है, जो कुछ ऐसा है जो आप पुस्तकालय स्क्रिप्ट के साथ कभी नहीं करना चाहते हैं। आप एक फ़ंक्शन/क्लास की दो प्रतियों के साथ समाप्त नहीं करना चाहते हैं जो समान दिखते हैं लेकिन बराबर की तुलना नहीं करते हैं, और जो पृष्ठ पर हुक धारण करते हैं जो एक दूसरे के साथ अच्छी तरह से नहीं खेलते हैं। गतिशील रूप से सम्मिलित लाइब्रेरी स्क्रिप्ट भ्रमित विफलता के लिए एक नुस्खा है।

अपनी स्क्रिप्ट को स्थिर रूप से शामिल करना बेहतर है, और पृष्ठ पर नए तत्व लिखने के बाद उन्हें मैन्युअल रूप से पृष्ठ तत्वों से जोड़ना बेहतर है। यदि आपको वास्तव में आवश्यकता है तो आपके AJAX कॉल एक JSON ऑब्जेक्ट को पकड़ सकते हैं जिसमें नए HTML को जोड़ने और निष्पादित करने के लिए एक स्ट्रिंग स्क्रिप्ट शामिल है।

+0

हाय बॉबन्स, उत्तर के लिए धन्यवाद। मैंने स्क्रिप्ट टैग को बदलने की कोशिश की, लेकिन इसमें AJAX अनुरोध में जेएस फ़ाइलें शामिल नहीं हैं। क्या आप कृपया जेएस फ़ाइलों को गतिशील रूप से कॉल करने पर विस्तृत जानकारी दे सकते हैं। अनुभा – Anubhaw

+0

स्क्रिप्ट की सामग्री को निष्पादित करने से परेशान करना मुश्किल है। उनके 'टेक्स्टकंटेंट' का 'eval' स्थानीय दायरे में निष्पादित होगा, यदि आप वैश्विक कार्यों/युद्धों को परिभाषित कर रहे हैं तो कोई अच्छा नहीं हो सकता है; आपको XMLHttpRequest के साथ बाहरी स्क्रिप्ट की सामग्री भी प्राप्त करनी होगी। (लेकिन फिर, आप वास्तव में * लिखना समय पर डाली गई एक स्क्रिप्ट में ग्लोबल्स को परिभाषित नहीं करना चाहते हैं।) अधिक विश्वसनीय रूप से निष्पादित करने का एक तरीका '

-2
  1. पृष्ठों (यानी, एक लाइटबॉक्स शामिल तो लाइटबॉक्स स्क्रिप्ट शामिल)
  2. समस्या हल उन्हें इस्तेमाल करने की जरूरत है कि पर स्थिर स्क्रिप्ट शामिल हैं। AJAX
  3. मेक आवश्यक फंक्शन का उपयोग करके स्क्रिप्ट लोड न करें AJAX कॉलबैक
1

का उपयोग कर स्थिर लिपियों के लिए कॉल मैं एक ऐसी ही समस्या है, जहां मैं कुछ जावास्क्रिप्ट postload चाहते थे था।मैंने जो किया वह HTML-fragment को लोड करने और स्क्रिप्ट को दो कॉल में लोड करने से अलग है।

function loadModule(name, callback) { 
    $.ajax({type: "POST" 
      , url: "/js/" + name 
      , dataType: "script" 
      , success: callback 
    });  
} 
0

हे मैं इसे जोड़ने के लिए एक रास्ता मिल गया .... :)

इस नोट एक तुल्यकालिक है: स्क्रिप्ट मैं निम्नलिखित फ़ंक्शन को कॉल लोड करने के लिए (मैं JQuery ajax भाग से निपटने के लिए) प्रक्रिया ताकि आप न के बारे में चिंता है कि स्क्रिप्ट लोड है या नहीं है .... स्क्रिप्ट हमेशा उदाहरण लोड होगा यू फ़ंक्शन को कॉल करें और आप तुरंत भरी हुई स्क्रिप्ट का उपयोग शुरू कर सकते हैं ..

इन 2 कार्यों का उपयोग करने देता है

1) पहले वाला एजेक्स फ़ंक्शन रेटर है स्ट्रिंग के रूप में js फ़ाइल को लोड करने और फिर नए स्क्रिप्ट टैग के innerHTML से संलग्न हैं और फिर से संलग्न मूल्यों जहां async अनुरोध तुल्यकालिक

// AJAX FUNCTION 
    function loadXMLDoc(reqt,url,reqp,cfunc,async) 
    { 
     var xmlhttp; 
     try// code for IE7+, Firefox, Chrome, Opera, Safari 
     { 
      xmlhttp=new XMLHttpRequest(); 
     } 
     catch(err)// code for IE6, IE5 
     { 
      try{ 
       xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch(e){ 
       try{ 
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       catch(E){} 
      } 
     } 
     if(!xmlhttp) 
     { 
      alert("error"); 
     } 
    xmlhttp.onreadystatechange=function(){ 
     if(xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      cfunc(xmlhttp.responseText); 
     } 
    } 
    if(reqt=='GET') 
    { 
     url+=(reqp!=""?"?":"")+reqp; 
     xmlhttp.open("GET",url,(async?false:true)); 
     xmlhttp.send(); 
    } 
    else if(reqt=='POST') 
    { 
     xmlhttp.open("POST",url,(async?false:true)); 
     xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
     xmlhttp.send(reqp); 
    } 
    else 
    { 
     return false; 
    } 
    } 
    /*use this function 
    loadXMLDoc(reqt,url,reqp,function(response){ 
    }); 
    */ 

2 भेजने के लिए सही होना चाहिए) तो हम ajax का उपयोग ieve सिर अनुभाग और फ़ाइल सुनिश्चित करने के लिए एक और बात पहले से ही भरी हुई है मैं फ़ाइल जो यह डुप्लिकेट के लिए जाँच करने के लिए वास्तव में आसान काम नहीं करता है के लिए पथ के रूप में स्क्रिप्ट टैग की आईडी का इस्तेमाल किया ... :)

//add new script dynamically 
    function add_script(src) 
    { 
     if(!document.getElementById(src)) 
     { 
      loadXMLDoc("GET",src,"",function(jsresp){ 
       var head = document.getElementsByTagName("head")[0]; 
       var script=document.createElement("script"); 
       script.type='text/javascript'; 
       script.id=src; 
       script.text=jsresp; 
       head.appendChild(script); 
      },true); 
     } 
    } 

के लिए धन्यवाद मैं इस साइट और उसके उपयोगकर्ताओं से विकास उद्देश्यों के लिए प्राप्त करने और प्राप्त करने के लिए उपयोग की जाने वाली सभी सहायता ...

वीआईपीआईएन जैन

+0

मेरे पास यह मेरे कोड नए Ajax.Request ('/ products/view_favorite_list में है?order_no = '+ order_no, {asynchronous: true, evalScripts: true, सम्मिलन:' प्रतिस्थापित करें ', पैरामीटर:' main_item_id = '+ action}); मैं अपने पसंदीदा लिस्टिंग पेज पर जेएस फाइलों को शामिल करना चाहता हूं, क्या आप मुझे गाइड कर सकते हैं कि मुझे कोड – vasu

+0

हेड बड बस इन 2 कार्यों की प्रतिलिपि बनाना चाहिए और जब भी आप जेएस फ़ाइल जोड़ना चाहते हैं तो बस इस फ़ंक्शन को इस --- -------------------------------------------------- --- add_script ("आपके जेएस फ़ाइल के लिए पथ"); ------------------------------------------------- ------- यह तुरंत उपयोग के लिए पृष्ठ के शीर्ष पर आपकी जेएस फ़ाइल जोड़ देगा --------------------------- ----------------------------- कृपया उत्तर दें यदि आपके पास और प्रश्न हैं ------------ -------------------------------------------- मैंने कोड संपादित किया है अभी पुराने ब्राउज़र में कुछ त्रुटि की वजह से कृपया नया कोड कॉपी करें :) –

+0

मैं देख सकता हूं कि अनुरोध कंसोल में जेएस फ़ाइल में किया गया है लेकिन जावास्क्रिप्ट को कॉल नहीं किया जा रहा है :( – vasu

संबंधित मुद्दे