JQuery: 'अनकैप्ड टाइपर्रर: अवैध मंगलाचरण' अजाक्स अनुरोध पर - कई तत्व


112

मेरे पास दो चुनिंदा तत्व हैं, ए और बी: जब ए का चयनित विकल्प बदलता है, तो बी के विकल्पों को तदनुसार अपडेट किया जाना चाहिए। ए में प्रत्येक तत्व बी में कई तत्वों का तात्पर्य करता है, यह एक-से-कई संबंध हैं (ए में राष्ट्र हैं, बी में दिए गए राष्ट्रों में स्थित शहर होने चाहिए)।

फ़ंक्शन do_ajaxको अतुल्यकालिक अनुरोध चलाना चाहिए:

function do_ajax(elem, mydata, filename)
{
    $.ajax({
        url: filename,
        context: elem,
        data: mydata,
        datatype: "html",
        success: function (data, textStatus, xhr) {
            elem.innerHTML = data;
        }
    });
}

B के विकल्पों को अपडेट करने के लिए मैंने A के onChangeईवेंट में एक फ़ंक्शन कॉल जोड़ा है । यहां वह फ़ंक्शन है जो Aचालू होता है जब onChange इवेंट (का ) चालू होता है:

function my_onchange(e) // "e" is element "A"
{
    var sel_B = ... ; // get select element "B"

    // I skipped some code here
    // ...

    var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
    };
    do_ajax(city_sel, data, 'ajax_handler.php');
}

}

मैंने JQuery डॉक्स में पढ़ा है जो dataएक सरणी (मुख्य मूल्य जोड़े) हो सकता है। अगर मुझे लगा तो मुझे त्रुटि मिलेगी:

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
};

इसके बजाय, मुझे वह त्रुटि नहीं मिलती है यदि मेरा डेटा एक स्ट्रिंग है:

var data = 'mode=filter_city&id_A=' + e[e.selectedIndex];

लेकिन मुझे चर के "सरणी संस्करण" की आवश्यकता है, मेरे सर्वर-साइड php कोड में।

Uncaught TypeError: Illegal invocation, "JQuery-1.7.2.min.js" फाइल है, जो सभी संकुचित है में स्थित है तो मैं समझ नहीं सकता है कोड का हिस्सा हैं तो त्रुटि उठाया।

क्या कोई सेटिंग है जिसे मैं अपने कोड में बदल सकता हूं ताकि यह डेटा को एक सहयोगी सरणी के रूप में स्वीकार करे?

जवाबों:


151

सरफराज के साथ बात करने के लिए धन्यवाद हम समाधान का पता लगा सकते हैं।

समस्या यह थी कि मैं इसके मूल्य के बजाय एक HTML तत्व पारित कर रहा था, जो वास्तव में मैं क्या करना चाहता था (वास्तव में मेरे php कोड में मुझे अपनी citiesतालिका क्वेरी करने और सही प्रविष्टियों को फ़िल्टर करने के लिए एक विदेशी कुंजी के रूप में उस मूल्य की आवश्यकता है )।

इसलिए, इसके बजाय:

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
};

यह होना चाहिए:

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex].value
};

नोट: जेसन कुलतुंगा के जवाब की जांच करें , यह JQuery के डॉक्टर को यह बताने के लिए उद्धृत करता है कि HTML तत्व को पारित करना क्यों परेशानी पैदा कर रहा था।


वास्तव में मैं क्या कर रहा था। उपयोग करना भूल गए .val ()
उस्मान शौकत

मैं विकल्प चुन रहा था, एक चर में चुनिंदा html तत्व का। ध्यान नहीं दिया यह सादे पाठ नहीं था, लेकिन html।
स्टर्लिंग डियाज

46

इसके लिए jQuery डॉक्स से processData:

processData बूलियन
डिफ़ॉल्ट: सही
डिफ़ॉल्ट रूप से, डेटा विकल्प में ऑब्जेक्ट (तकनीकी रूप से, स्ट्रिंग के अलावा कुछ भी) के रूप में पारित डेटा संसाधित किया जाएगा और एक क्वेरी स्ट्रिंग में बदल जाएगा, डिफ़ॉल्ट सामग्री प्रकार "आवेदन / x-www के लिए फिटिंग -form-urlencoded "। यदि आप DOMDocument, या अन्य गैर-संसाधित डेटा भेजना चाहते हैं, तो इस विकल्प को गलत पर सेट करें।

स्रोत: http://api.jquery.com/jquery.ajax

ऐसा लगता है कि आपको processDataसर्वर पर अपना डेटा भेजने के लिए उपयोग करना पड़ रहा है , या एन्क्रोमिटिंग पैरामीटर का समर्थन करने के लिए अपनी php स्क्रिप्ट को संशोधित करना है।


1
यह सच है। अगर मैं इसे देख पाता, तो इससे पहले कि मैं अपने कोड में वास्तविक त्रुटि की ओर इशारा करता। धन्यवाद, मैं अपने उत्तर में एक नोट जोड़ूंगा।
नादिर संपोली

25

मुझे फॉर्मडेटा ऑब्जेक्ट पोस्ट करते समय यह त्रुटि हो रही थी क्योंकि मैं ajax कॉल को सही ढंग से सेट नहीं कर रहा था। तय मेरे मुद्दे के नीचे सेटअप।

var myformData = new FormData();        
myformData.append('leadid', $("#leadid").val());
myformData.append('date', $(this).val());
myformData.append('time', $(e.target).prev().val());

$.ajax({
    method: 'post',
    processData: false,
    contentType: false,
    cache: false,
    data: myformData,
    enctype: 'multipart/form-data',
    url: 'include/ajax.php',
    success: function (response) {
        $("#subform").html(response).delay(4000).hide(1); 
    }
});

धन्यवाद दोस्त। मेरे दिन को बचाया और मेरी समस्या को हल किया गया है "अजाक्स बॉडी में" प्रोसेसडेटा: गलत, कंटेंट टाइप: गलत, कैशे: गलत, "। बहुत बहुत धन्यवाद।
कुमाटेकिन

11

मैंने JQuery डॉक्स में पढ़ा है कि डेटा एक सरणी (मुख्य मूल्य जोड़े) हो सकता है। अगर मुझे लगा तो मुझे त्रुटि मिलेगी:

यह एक सरणी नहीं है:

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
};

आप शायद चाहते हैं:

var data = [{
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
}];

1
यह उस त्रुटि को अब और नहीं फेंकता है, लेकिन ऐसा लगता है कि यह डेटा मेरे $_GETऐरे सर्वर-साइड ( var_export($_GET)आउटपुट array ( 'undefined' => 'undefined', )) में पारित नहीं हो रहा है
नादिर संपोली

@nadirs: अपने $.ajaxहैंडलर में डिफाइनिंग मेथड टाइप टाइप करें :type:'get',
सरफराज

@ सरफराज परिणाम वही है। सर्वर-साइड, dataचाबियाँ जीईटी सरणी में पाई जानी चाहिए, है ना? या हो सकता है कि वे किसी अन्य अनुरोध विधि के माध्यम से वैसे भी भेजे गए हों?
नादिर संपोली

@ nadirs: कुछ इस तरह काम करता है data: {foo:'myfoo', bar:'mybar'}, मुझे लगता है कि कुछ अन्य समस्या हो सकती है।
सरफराज

@ सरफराज मैं एक बेवकूफ हूं, मैं एक HTML ऑब्जेक्ट भेज रहा था e[e.selectedIndex]जबकि मुझे इसका मूल्य पारित करना चाहिए था e[e.selectedIndex].value। इस दोष को ठीक करने के बाद, ऑब्जेक्ट नोटेशन ठीक काम करता है।
नादिर संपोली

7

हाल ही में एक ही मुद्दा था, जोड़कर हल किया traditional: true,


यह वास्तव में काम करता है, मैं आधुनिक ब्राउज़रों के लिए केवल तभी मान रहा हूं
barnacle.m

0
function do_ajax(elem, mydata, filename)
{
    $.ajax({
        url: filename,
        context: elem,
        data: mydata,
        **contentType: false,
        processData: false**
        datatype: "html",
        success: function (data, textStatus, xhr) {
            elem.innerHTML = data;
        }
    });
}

4
एक अच्छा जवाब सिर्फ एक कोड स्निपेट से अधिक है। यह बताना चाहिए कि यह प्रारंभिक प्रश्न का उत्तर क्यों देता है और यदि उपलब्ध हो तो संबंधित दस्तावेज के लिंक प्रदान करता है।
JSTL

दो क्षेत्रों के बिना contentTypeऔर processData, त्रुटि दिखाती रहेगी। मैंने दोनों क्षेत्रों को जोड़ा और यह मेरे लिए काम किया। मुझे लगता है कि ऑप दो महत्वपूर्ण क्षेत्रों को इंगित करने की कोशिश कर रहा था।
इकुनदियो आशीर्वाद फनमिनी

-1
$.ajax({
                    url:"",
                    type: "POST",
                    data: new FormData($('#uploadDatabaseForm')[0]),
                    contentType:false,
                    cache: false,
                    processData:false,
                    success:function (msg) {}
                  });

7
यदि आप स्पष्टीकरण शामिल करते हैं तो उत्तर अधिक सहायक होते हैं।
जॉन बी

-2

इसे इस्तेमाल करे:

            $.ajax({
                    url:"",
                    type: "POST",
                    data: new FormData($('#uploadDatabaseForm')[0]),
                    contentType:false,
                    cache: false,
                    processData:false,
                    success:function (msg) {}
                  });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.