दिलचस्प पोस्ट
जावा के लिए जावास्क्रिप्ट पार्सर तंत्रिका नेटवर्क में पूर्वाग्रह की भूमिका मैं एक वेक्टर में किसी आइटम का सूचक कैसे प्राप्त करूं? सी # स्ट्रिंग संदर्भ प्रकार? डेटा इनपुट के लिए कस्टम दृश्य का एक स्विफ्ट उदाहरण (कस्टम इन-एप कीबोर्ड) जावास्क्रिप्ट ऑब्जेक्ट की क्वेरी स्ट्रिंग एन्कोडिंग आराम एपीआई सर्वश्रेष्ठ अभ्यास: पैरामीटर डाल करने के लिए कहाँ? सर्वर। ट्रांसफर वि। Response.Redirect मैं JSON को CSV में कैसे रूपांतरित कर सकता / सकती हूं? मैं पायथन में सेट्स का सेट कैसे बना सकता हूं? लारेवल में संबंधित पंक्तियों को स्वचालित रूप से हटाया जाना (सुवक्ता ORM) इनलाइन फ़ंक्शंस लिंक जांचें कि ऑब्जेक्ट सदस्य नेस्टेड ऑब्जेक्ट में मौजूद है या नहीं Laravel 3: मॉडल का उपयोग करने के लिए स्पष्टीकरण की तलाश में सफ़ल पाठ 2 में अलग फ़ाइल प्रकार के लिए डिफ़ॉल्ट सिंटैक्स सेट करें

ट्रिगर एन्कक्रोनस अजाक्स पर इनपुट = फाइल पर क्लिक करें ()

मेरे पास कुछ डेटा और अपलोड के साथ एक फ़ॉर्म है। अपलोड केवल तब शुरू किया जा सकता है जब डाटा सफलतापूर्वक प्राप्त हो और संसाधित हो। ऐसा करने के लिए, मैं एक एजेक्स कॉल करता हूं जहां मैं

  1. डेटा भेजें,
  2. इसके परिणाम की जांच करें,
  3. किसी फ़ाइल संवाद बॉक्स को खोलने के लिए एक क्लिक () ट्रिगर करें

क्लिक () के साथ आखिरी चीज काम नहीं करती है क्योंकि ऐसा लगता है कि एसिंक्रोनस कॉल ब्लॉक अपलोड विंडो खोलते हैं । यह केवल तभी काम करता है जब मैं async: false सेट करता हूं async: false

मुझे दस्तावेज़ीकरण और इस साइट में कुछ भी नहीं मिल रहा है और यह जानना चाहता हूं कि वहां समस्या क्या है और इसे कॉल अतुल्यकालिक रखने के लिए कैसे काम करना है?

उदाहरण:

 $.ajax({ type: "POST", url: "/Save", data: jsonText, dataType: "json", //async: false [1] }).done(function (msg) { $("#upload").click(); }); //$("#upload").click(); [2] 

डेमो: http://jsfiddle.net/c2v00uxn/

ध्यान दें:

  • अगर मैं [1] या [2] अनुकरण करता हूं, तो यह काम करता है (फ़ाइल संवाद अपेक्षित रूप में प्रकट होता है)
  • ट्रिगर ('क्लिक') के साथ क्लिक () की जगह काम नहीं करता है
  • () / पर () के साथ क्लिक () को प्रतिस्थापित करने में मदद नहीं करता
  • फ़ाइल अपलोड नियंत्रण उदाहरण के अनुसार दिखाई दे रहा है (इसलिए यह छिपा हुआ नियंत्रण के कारण नहीं है)
  • एजेक्स के लिए टाइमआउट सेटिंग्स मदद नहीं करते हैं

अद्यतन करें

यह सामान्य रूप में "क्लिक" करने के बारे में नहीं है, यह एक अतुल्यकालिक अजाक्स कॉल (अब के रूप में केवल गैर-अतुल्यकालिक कॉल के साथ ही काम करता है) के बाद क्लिक करने के तरीके के बारे में है।

वेब के समाधान से एकत्रित समाधान "ट्रिगर एन्कक्रोनस अजाक्स पर इनपुट = फाइल पर क्लिक करें ()"

ब्राउज़र में w3c की सिफारिश की सुरक्षा सुविधाओं के कारण एसिंक एजेक्स कॉलबैक से फ़ाइल पॉपअप विंडो खोलने के लिए अभी संभव नहीं है।

फ़ाइल इनपुट तत्व के सक्रियण व्यवहार में यह पहली बार जांचता है कि अगर एल्गोरिथ्म को पॉपअप दिखाने की अनुमति है , तो नहीं तो अगले चरण को कुछ भी करने के बिना रद्द करें w3c.org से

एक एल्गोरिथ्म को पॉपअप दिखाने की अनुमति है अगर निम्न स्थितियों में से कोई भी सत्य है:

  1. कार्य जिसमें एल्गोरिथ्म चालू हो रहा है, वर्तमान में एक सक्रियण व्यवहार की प्रक्रिया कर रहा है जिसका क्लिक ईवेंट विश्वसनीय था । (विश्वसनीय इवेंट: उपयोगकर्ता एजेंट द्वारा उत्पन्न होने वाली घटनाएं, या तो उपयोगकर्ता इंटरैक्शन के परिणामस्वरूप, या परिवर्तनों के प्रत्यक्ष परिणाम के रूप में DOM, विशेषाधिकारों के साथ उपयोगकर्ता एजेंट पर भरोसा करते हैं, जो कि DocumentEvent.createEvent("Event") विधि के माध्यम से स्क्रिप्ट के द्वारा उत्पन्न घटनाओं को नहीं देते, Event.initEvent() विधि का उपयोग करके संशोधित, या EventTarget.dispatchEvent() माध्यम से EventTarget.dispatchEvent() विश्वसनीय भरोसेमंद घटनाओं की विश्वसनीय विशेषता का सही मूल्य है, जबकि अविश्वस्त घटनाओं में झूठी की विश्वसनीय विशेषता मान है। अन्यथा http://www.w3.org/TR/2012/WD-DOM-Level-3-Events -20120614 / # विश्वसनीय-ईवेंट ।)
  2. कार्य जिसमें एल्गोरिथ्म चल रहा है वर्तमान में एक विश्वसनीय ईवेंट के लिए ईवेंट श्रोता को चला रहा है जिसका प्रकार निम्न सूची में है:

    • परिवर्तन
    • क्लिक
    • dblclick
    • mouseup
    • रीसेट
    • जमा करें
  3. कार्य जिसमें एल्गोरिथ्म चल रहा है वह एक एल्गोरिथ्म द्वारा कतारबद्ध था जिसे पॉपअप दिखाने की अनुमति दी गई थी, और ऐसे एल्गोरिदम की श्रृंखला उपयोगकर्ता-एजेंट निर्धारित समय सीमा के भीतर शुरू हुई थी।

w3c.org

आपके कोड में क्लिक ईवेंट उपयोगकर्ता द्वारा ट्रिगर नहीं किया गया है लेकिन इसकी शुरुआत एजेक्स पूर्ण कॉलबैक द्वारा की गई है। यहां ब्राउज़र घोषित करता है कि घटना को पॉपअप खोलने के लिए भरोसेमंद नहीं किया जा सकता। कुछ ब्राउज़रों में आप एक isTrusted विशेषता को सही पर सेट कर सकते हैं यदि ईवेंट को विश्वसनीय माना जाता है https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted

ध्यान दें

विभिन्न ब्राउज़रों में एक स्क्रिप्ट सक्रिय कैक और एक असली उपयोगकर्ता के बीच अंतर को विभिन्न तरीकों का इस्तेमाल करते हैं।

इस परिदृश्य में आप ऐसा कर सकते हैं कि फ़ाइल इनपुट बटन को अक्षम करें (या संपूर्ण फॉर्म) और एजेक्स के बाद सक्षम हो जाए। इस तरह उपयोगकर्ता अभ्यस्त अपलोड बटन पर क्लिक करें जब तक कि एजेक्स अनुरोध पूरा हो जाए अब तक एक क्लिक में दोनों को करने का कोई दूसरा तरीका नहीं है क्योंकि पॉपअप खोलने के लिए एक समय सीमा सीमा भी है। जब मैंने क्रोम में चेक किया तो समय सीमा 1000ms है उपयोगकर्ता कार्रवाई के बाद 1000ms, विंडो खोला नहीं जाएगी।

मेरे पास एक समाधान है जो अब के लिए काम करता है यह एक हैक है, इसलिए यह नजदीकी भविष्य में काम नहीं करेगा, क्योंकि यह ऊपर Tkay द्वारा उल्लिखित सुरक्षा विशेषताओं को ठीक करता है।

मैं समयरेखा पेश करता हूं जो फ़ाइल ब्राउज़र डायलॉग शुरू करने से पहले डेटा को वापस करने के लिए एजेक्स अनुरोध की प्रतीक्षा करता है I

 customFileUploadButton.addEventListener('click', function(e) { var returnValueToCheck; //Value we want to check against //reference to vanilla JS ajax function that takes callback ajax(function(ajaxData) { returnValueToCheck = ajaxData; }); setTimeout(function() { if (returnValueToCheck !== undefined) { //dummy check for example file.click(); } else { console.log("Criteria not fulfilled"); } }, 1000);//timer should be larger than AJAX timeout }); 

ईमानदार होने के लिए, मैं थोड़ा निश्चित है कि स्पष्ट रूप से इस तरह के व्यवहार को निषिद्ध करने वाले ब्राउज़र विशिष्ट परीक्षणों को जाहिरा तौर पर पारित करने से यह काम अलग है। इसके लिए मैं इसे एक हैक के रूप में मानता हूं।

मेरा उदाहरण वेनिला जेएस है, लेकिन यह jQuery संस्करण बनाने में आसान होना चाहिए। पूर्ण उदाहरण के लिए यह जेएसएफडियल देखें।

(यह योगदान करने में मेरा पहला उद्यम है, इसलिए संभावित त्रुटियों और ओवरसाइटों पर टिप्पणी करें)

JQuery का कहना है कि, ट्रिगर फ़ाइल अपलोड और एंकर जैसे तत्वों के लिए काम नहीं करेगा। (स्रोत – https://learn.jquery.com/events/triggering-event-handlers/ )

.trigger () फ़ंक्शन का उपयोग मूल ब्राउज़र ईवेंट की नकल करने के लिए नहीं किया जा सकता, जैसे कि फ़ाइल इनपुट बॉक्स या एंकर टैग पर क्लिक करना। यह इसलिए है, क्योंकि इन घटनाओं से मेल खाती jQuery के इवेंट सिस्टम का उपयोग करके कोई ईवेंट हैंडलर संलग्न नहीं है

तो उस स्थिति में, आपको निम्नलिखित जावास्क्रिप्ट कार्यों का उपयोग करके मैन्युअल रूप से ईवेंट बनाने की आवश्यकता हो सकती है।

  • document.createEvent
  • event.initMouseEvent
  • element.dispatchEvent

उपर्युक्त कार्यों के लिए एक नमूना कोड + परिभाषा मोज़िला के डेवलपर साइट में पाई जा सकती है

https://developer.mozilla.org/samples/domref/dispatchEvent.html

शायद, यह आपकी सहायता करेगा

 $(function () { $('#demo').click(function () { $.ajax({ type: "POST", url: "/echo/json/", data: "jsonText", dataType: "json", }).done(function (msg) { $("#demo").addClass("test"); }).fail(function(jqXHR, textStatus, errorThrown){ alert(textStatus); }); if($("#demo").hasClass("test")){ $("#upload").click(); } }); });