नीचे दिए गए उदाहरण में मैं typeahead वर्ग का एक उदाहरण बनाता हूं

    var ta = $.typeahead({
        input: '.super',
        minLength: 0,
        maxItem: 15,
        order: "asc",
        hint: true,
        href: "",
        searchOnFocus: true,
        display: ["name"],
        template: "{{name}}",
        source: {
            "SearchResults": {
                //ajax: {
                //    url: "/search/" + id,
                //    path: ""
                //}
            }
        },
        callback: {
            onClickAfter: function (node, a, item, event) {
                event.preventDefault;
                debugger;
            }
        },
        debug: true
    });

बाद में, और id वेरिएबल का उपयोग करके जो निम्न विधि के माध्यम से प्राप्त किया जाता है

    $("input").focus(function () { 
        id = $(this).attr("id");
        ta.source.ajax.url = "/search/" + id;
    }); 

मुझे Cannot set property 'url' of undefined मिलता है क्योंकि ta.source.ajax वास्तव में शून्य है। मैं कैसे इसे ठीक कर सकता हूं?

सीधे शब्दों में कहें, मैं अपने फॉर्म के प्रत्येक इनपुट के लिए डुप्लिकेट कोड नहीं बनाना चाहता

3
OrElse 27 मार्च 2020, 13:00
1
ta.source के गुण हैं? ऐसा लगता है कि यह ta.source.SearchResults.ajax.url होना चाहिए
 – 
freedomn-m
27 मार्च 2020, 13:07
1
ta.source.ajax वास्तव में शून्य है - यदि यह शून्य था तो आपको Cannot read property 'url' of null मिलेगा - यह शून्य नहीं है, यह गलत संपत्ति का नाम है (इसलिए अपरिभाषित)
 – 
freedomn-m
27 मार्च 2020, 13:09
असल में, अगर मैं उपरोक्त टिप्पणी कोड का उपयोग करता हूं और आईडी सेट करता हूं तो यह बहुत अच्छा काम करता है। प्रस्तावित समाधान से मैं अपरिभाषित की संपत्ति 'AJAX' नहीं पढ़ सकता
 – 
OrElse
27 मार्च 2020, 13:13
क्या आपने ta.source["SearchResults"].ajax.url की कोशिश की है?
 – 
Souleste
6 अप्रैल 2020, 22:58
@ स्वतंत्रता-एम जब आप अपरिभाषित संपत्ति के लिए कुछ मूल्य निर्दिष्ट करते हैं तो यह TypeError: Cannot set property 'url' of undefined फेंकता है और जब आप इसे एक्सेस करते हैं तो TypeError: Cannot read property 'url' of undefined फेंकता है। @OrElse ऑब्जेक्ट प्रॉपर्टी को असाइन करने या एक्सेस करने से पहले मान्य करें। if (ta.source.ajax instanceof Object) { if (ta.source.ajax.url) { ta.source.ajax.url = "/search/" + id; } else { ta.source.ajax = { url: "/search/" + id } }} else { ta.source = { ajax: { url: "/search/" + id } } }
 – 
Arjun Singh
8 अप्रैल 2020, 08:44

4 जवाब

टाइपहेड इंस्टेंस के options प्रॉपर्टी के ज़रिए SearchResults ग्रुप को कॉन्फिगर करें।

source टाइपहेड इंस्टेंस की संपत्ति options से उत्पन्न होती है।

ta.options.source.SearchResults.ajax.url = "/search/" + id;
2
Oluwafemi Sule 2 अप्रैल 2020, 08:35
करीब आ रहे हैं। अब मुझे दिए गए यूआरएल के साथ कोई संसाधन नहीं मिला है।
 – 
OrElse
7 अप्रैल 2020, 22:27
सुनिश्चित करें कि आपके सर्वर पर "/search/" पथ मौजूद है।
 – 
Oluwafemi Sule
8 अप्रैल 2020, 10:27

मुझे लगता है कि आपको ta.source.ajax.url के बजाय ta.source.SearchResults.ajax.url का उपयोग करना चाहिए जैसा कि @freedomn
द्वारा सुझाया गया है

$("input").focus(function () { 
    id = $(this).attr("id");
    ta.source.SearchResults.ajax.url = "/search/" + id;
}); 

साथ ही, @OrElse अपनी त्रुटि के बारे में, गुणों को खाली छोड़ने का प्रयास करें और उन पर टिप्पणी न करें। साथ ही SearchResults से दोहरे उद्धरण चिह्नों को हटाने का प्रयास करें --

source: {
    SearchResults: {
        ajax: {
            url: "/search/" + id,
            path: ""
        }
    }
},
0
sauhardnc 4 अप्रैल 2020, 12:52
नमस्ते और SO में आपका स्वागत है! दुर्भाग्य से ऐसा करने से, मुझे अपरिभाषित त्रुटि की संपत्ति 'AJAX' नहीं पढ़ा जा सकता है
 – 
OrElse
7 अप्रैल 2020, 22:20

हो सकता है कि आप किसी प्रकार की jQuery की लाइब्रेरी का उपयोग कर रहे हों। लेकिन अगर यह आपके चर को ठीक से लोड और प्रारंभ कर रहा है। और आपको अन्य सभी संपत्ति मिल रही है तो यह एक छोटी सी समस्या है। आइए एक संभावित मामले पर चर्चा करें और समस्या को समझें

    var ta = $.typeahead({
            input: '.super',
            minLength: 0,
            maxItem: 15,
            order: "asc",
            hint: true,
            href: "",
            searchOnFocus: true,
            display: ["name"],
            template: "{{name}}",
            source: {
                "SearchResults": {
                    //ajax: {
                    //    url: "/search/" + id,
                    //    path: ""
                    //}
                }
            },
            callback: {
                onClickAfter: function (node, a, item, event) {
                    event.preventDefault;
                    debugger;
                }
            },
            debug: true
        });

जब आप "टा" चर में कुछ भी निर्दिष्ट करते हैं तो शायद आपको सभी संपत्ति मिल रही है। लेकिन आपको एक त्रुटि मिल रही है कि "अपरिभाषित की संपत्ति 'यूआरएल' सेट नहीं कर सकता"। तो यह स्पष्ट रूप से उल्लिखित संपत्ति है जिसका आप उपयोग करने का प्रयास कर रहे हैं वह यूआरएल है। तार्किक रूप से यह अजाक्स संपत्ति होनी चाहिए लेकिन अजाक्स स्वयं आपके चर में परिभाषित नहीं है। तो आपको पहले अजाक्स को परिभाषित करना चाहिए।

var ta = $.typeahead({
            input: '.super',
            minLength: 0,
            maxItem: 15,
            order: "asc",
            hint: true,
            href: "",
            searchOnFocus: true,
            display: ["name"],
            template: "{{name}}",
            source: {
                "SearchResults": {
                    ajax: { // now ajax is defined and you will not get any error. 
                    }
                }
            },
            callback: {
                onClickAfter: function (node, a, item, event) {
                    event.preventDefault;
                    debugger;
                }
            },
            debug: true
        });

हमेशा सुनिश्चित करें कि JSON का वेरिएबल पहले परिभाषित किया गया है आप बाद में किसी प्रॉपर्टी को परिभाषित कर सकते हैं।

उदाहरण के लिए

var a={}
a.b.c=10
console.log(a.b.c)// you will get same error.

लेकिन अगर आप नीचे की तरह कुछ इस्तेमाल करते हैं।

a.b={}
a.b.c=10 
console.log(a.b.c)// you will not get an error.

आशा है कि यह आपकी मदद करेगा।

0
Negi Rox 5 अप्रैल 2020, 21:00

अगर ta.source.ajax मौजूद है, तो उसे अशक्त त्रुटि की संपत्ति को फेंकने से रोकने के लिए अगर कथन की जाँच में लाइन को लपेटने के बारे में क्या है

if(ta.source.ajax){
   ta.source.ajax.url = "/search/" + id;
}
0
yume 8 अप्रैल 2020, 03:40