2012-08-13 16 views
27

मैं डेटाटेबल्स में चेतावनी (अलर्ट) को सही ढंग से दबाने का प्रयास कर रहा हूं। डेटाटेबल्स का मानक व्यवहार एक त्रुटि होने पर जावास्क्रिप्ट अलर्ट फेंकना है; हालांकि, यह वर्तमान में मेरे लिए असुविधाजनक है। मैं द्वाराडेटाटेबल्स में चेतावनी को सही ढंग से दबा रहा है?

$.fn.dataTableExt.sErrMode = 'throw'; 

कौन सा ठीक से काम करता JavaScript त्रुटि के लिए चेतावनी कन्वर्ट करने के लिए कोशिश कर रहे हैं, लेकिन यह वर्तमान जावास्क्रिप्ट निष्पादन, जो नहीं है जो मैं चाहता बंद हो जाता है। इसलिए, मैंने डेटाटेबल्स ऑपरेशंस (इनिट और चेंज) को किसी भी त्रुटि से निपटने के बिना प्रयास-पकड़ में लपेट लिया; हालांकि, यह जावास्क्रिप्ट निष्पादन को रोकता है। (Chrome और Firefox पर परीक्षण किया गया)

मेरे सवाल यह है कि मैं के बारे में डिबगिंग के प्रयोजनों के लिए इन त्रुटियों/अलर्ट से छुटकारा पाने जाते हो रहा है? मैं अपनी लिपि के अन्य हिस्सों को डीबग करने की कोशिश कर रहा हूं, लेकिन ये अलर्ट रास्ते में आ रहे हैं।

+0

सबसे अच्छा समाधान हमेशा डेटाटेबल्स को दी गई जानकारी को सत्यापित करना होगा ताकि उसे फेंकने की कोई चेतावनी न हो ... – KRyan

+0

उस एक्सटेंशन ने मेरे लिए कुछ भी नहीं किया ... क्या आपको कभी जवाब मिला यह प्रश्न? –

+0

इस पर कोई समाधान? मुझे भी एक ही समस्या का सामना करना पड़ रहा है ... धन्यवाद – Wangchao0721

उत्तर

14

एनबी: यह उत्तर डेटाटेबल्स 1.9.x पर लागू होता है!

$.fn.dataTableExt.sErrMode के लिए केवल एक ही मूल्य है "चेतावनी" कोई महत्व है। यह "चेतावनी" या कुछ और है। sErrMode आंतरिक डिस्पैचर समारोह _fnLog द्वारा media/js/jquery.dataTables.js में लाइन 4575 के बारे में v1.9.2 में, नियंत्रित किया जाता है:

function _fnLog(oSettings, iLevel, sMesg) 
{ 
    var sAlert = (oSettings===null) ? 
     "DataTables warning: "+sMesg : 
     "DataTables warning (table id = '"+oSettings.sTableId+"'): "+sMesg; 

    if (iLevel === 0) 
    { 
     if (DataTable.ext.sErrMode == 'alert') 
     { 
      alert(sAlert); 
     } 
     else 
     { 
      throw new Error(sAlert); 
     } 
     return; 
    } 
    else if (window.console && console.log) 
    { 
     console.log(sAlert); 
    } 
} 

Unfortunelaty, वहाँ DataTables आंतरिक कार्यों ओवरराइड करने के लिए कोई रास्ता नहीं है, मुझे विश्वास है - मैं कोशिश की है, प्रोटोटाइप के साथ संभव नहीं या फिर कुछ और। आपको लगता है कि here लेखक एलन Jardines अपनी टिप्पणी पढ़ सकते हैं:

कैसे DataTables पल में निर्माण किया है की वजह से मुझे लगता है कि कहने के लिए माफी चाहता हूँ, इसके बारे में बाहर जावास्क्रिप्ट का उपयोग करते हुए एक आंतरिक समारोह ओवरराइड करने के लिए संभव नहीं है डेटाटेबल्स स्कोप। यह कुछ संबोधित किया जाएगा कि जब भी मैं 2.x श्रृंखला कर रही करने के लिए चारों ओर हो रही है (जो बंद थोड़ी देर हो सकती है!) - लेकिन वर्तमान में आप कोर को बदलने के लिए की आवश्यकता होगी। अरे, शायद iLevel-झंडा सेटिंग्स में कहीं बदला जा सकता है:

एक यह है कि लगता है कि हो सकता है? फिर, दुर्भाग्य से नहीं। iLevel प्रत्येक आंतरिक कॉल में _fnLog पर हार्डकोड किया गया है।

यह किसी भी तरह निराशाजनक है हम, बदसूरत सचेतक और पूरी तरह से निष्पादन के पड़ाव के बीच चयन करने के लिए क्योंकि एक त्रुटि फेंक दिया जाता है की है। window.onerror का एक ओवरराइड या तो काम नहीं करता है। समाधान _fnLog संशोधित करने, बस लाइन जहां कस्टम त्रुटि फेंक दिया जाता है बाहर टिप्पणी करने के लिए है:

else 
{ 
    // throw new Error(sAlert); <-- comment this line 
} 

और निष्पादन जारी है अगर आपके पास $.fn.dataTableExt.sErrMode = 'throw' (कुछ और लेकिन "चेतावनी") और यदि त्रुटियों होता है। और भी बेहतर, एक, अन्य स्थितियों में उन फेंक दिया त्रुटियों की जरूरत सकता है

window.isDebugging = true; 

और

else 
{ 
    if (!window.isDebugging) throw new Error(sAlert); 
} 

यह नहीं है एक "हैक" मेरी राय में की तरह बाहर एक ध्वज सेट,, लेकिन एक सामान्य की overruling टिकाऊ jQuery डेटा नहीं व्यवहार व्यवहार जो कभी-कभी संतोषजनक नहीं होता है।जैसा कि एलन जार्डिन स्वयं उपरोक्त लिंक में लिखते हैं:

आप स्रोत को संशोधित क्यों नहीं कर सकते? यही कारण है कि :-)

+0

धन्यवाद। डाटाटेबल फोरम में एक सुझाव था। https://datatables.net/forums/discussion/14680/warning-level-control-with- सुझाव क्या लागू किया गया था?वह क्लीनर दिखाई दिया और बॉक्स से बाहर हो जाएगा। उम्मीद है कि यह किया जा सकता है और आपका समाधान अच्छी तरह से काम करता है .. –

+0

यह ** आधिकारिक ** बन गया और यह ठीक से यहां दस्तावेज किया गया है: https://datatables.net/reference/event/error –

1

खुला स्रोत की पूरी बात है मुझे davidkonrad ऊपर की answer करने के लिए अपने 2 सेंट जोड़ते हैं। फ़ाइल को बदले बिना _fnLog समारोह को संशोधित करने की एक तरह से datatables सेटिंग्स में एपीआई उदाहरण से उस विधि के संदर्भ में प्राप्त करने के लिए है:

$.fn.dataTableSettings[0].oApi._fnLog = function(settings, level, msg, tn) { 
    // Modified version of _fnLog 
} 

उम्मीद है कि इस किसी के लिए उपयोगी होगा।

4

इस प्रयास करें:

$.fn.DataTable.ext.oApi._fnLog = function (settings, level, msg, tn) { 
    msg = 'DataTables warning: ' + 
      (settings !== null ? 'table id=' + settings.sTableId + ' - ' : '') + msg; 

    if (tn) { 
     msg += '. For more information about this error, please see ' + 
       'http://datatables.net/tn/' + tn; 
    } 
    console.log(msg); 
}; 
+0

यह काम नहीं किया! – orad

18

मैं कंसोल के लिए DataTables चेतावनी रीडायरेक्ट करने के लिए इस बंद समारोह का उपयोग कर देशी सचेतक संशोधित।

window.alert = (function() { 
    var nativeAlert = window.alert; 
    return function(message) { 
     window.alert = nativeAlert; 
     message.indexOf("DataTables warning") === 0 ? 
      console.warn(message) : 
      nativeAlert(message); 
    } 
})(); 

यह पहली बार ट्रिगर पर अपने मूल कार्य करने के लिए window.alert पुनर्स्थापित करता है। यदि आप मूल चेतावनी में पुनर्स्थापित नहीं करना चाहते हैं, तो बस window.alert = nativeAlert; लाइन पर टिप्पणी करें।

+4

यह मेरे लिए काम किया, धन्यवाद –

+0

यह समाधान काम करता है लेकिन लगता है कि प्रति पृष्ठ लोड केवल एक बार काम करता है। यानी उसी पृष्ठ पर कई त्रुटियां दबाई नहीं जाती हैं। –

+0

@ माइकल-स्मिथ हां, जिसे पोस्ट में समझाया गया है। आपको 'window.alert = nativeAlert;' लाइन पर टिप्पणी करने की आवश्यकता है। – orad

12

यहाँ एक समाधान proposed here कि थोड़ा किसी भी विक्रेता फ़ाइलों को बदलने के लिए बिना संशोधित और v1.10.2 में काम करता है है:

$.fn.dataTableExt.sErrMode = "console"; 

$.fn.dataTableExt.oApi._fnLog = function (oSettings, iLevel, sMesg, tn) { 
    var sAlert = (oSettings === null) 
    ? "DataTables warning: "+sMesg 
    : "DataTables warning (table id = '"+oSettings.sTableId+"'): "+sMesg 
    ; 

    if (tn) { 
    sAlert += ". For more information about this error, please see "+ 
       "http://datatables.net/tn/"+tn 
    ; 
    } 

    if (iLevel === 0) { 
    if ($.fn.dataTableExt.sErrMode == "alert") { 
     alert(sAlert); 
    } else if ($.fn.dataTableExt.sErrMode == "thow") { 
     throw sAlert; 
    } else if ($.fn.dataTableExt.sErrMode == "console") { 
     console.log(sAlert); 
    } else if ($.fn.dataTableExt.sErrMode == "mute") {} 

    return; 
    } else if (console !== undefined && console.log) { 
    console.log(sAlert); 
    } 
} 
+3

यह निश्चित रूप से उत्तर है। कोड 1.10 के बाद सभी संस्करणों में शामिल किया गया प्रतीत होता है, इसलिए डेटा तालिका जोड़ने से पहले '$ .fh.dataTableExt.sErrMode = "console" 'जोड़ना समस्या को ठीक करेगा। – Cfreak

+0

यह मेरे लिए काम करता है .. –

+0

धन्यवाद! यह वही है जो मुझे चाहिए था। –

3

DataTables संस्करण 1.10.15 के रूप में, आप $ .fn सेट कर सकते हैं। dataTableExt.errMode करने के लिए 'उपेक्षा' और यह चुपचाप त्रुटि संदेश पर ध्यान नहीं देगा:

$(document).ready(function() { 
     $.fn.dataTableExt.errMode = 'ignore'; 
    }); 

_fnLog DataTables समारोह निम्नलिखित कोड है:

 if (type == 'alert') { 
      alert(msg); 
     } 
     else if (type == 'throw') { 
      throw new Error(msg); 
     } 
     else if (typeof type == 'function') { 
      type(settings, tn, msg); 
     } 

डिफ़ॉल्ट मान 'चेतावनी' जो समस्याग्रस्त है।

आप फेंक 'पर भी सेट कर सकते हैं। यह जावास्क्रिप्ट त्रुटि बनाएगा, लेकिन उपयोगकर्ता को परेशान नहीं करेगा।

'' को अनदेखा करें या कोई अन्य मूल्य केवल धीमी गति से त्रुटि को छोड़ देगा।

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