जेकरी और एचटीएमएल फॉर्मडटा रिटर्न "अनकैप्ड टाइपरर: अवैध मंगलाचरण"


83

मैं अपनी छवि फ़ाइलों को अपलोड करने के लिए इस स्क्रिप्ट का उपयोग कर रहा हूं: http://jsfiddle.net/eHmSr/

$('.uploader input:file').on('change', function() {
  $this = $(this);

  $('.alert').remove();

  $.each($this[0].files, function(key, file) {
    $('.files').append('<li>' + file.name + '</li>');

    data = new FormData();
    data.append(file.name, file);

    $.ajax({
      url: $('.uploader').attr('action'),
      type: 'POST',
      dataType: 'json',
      data: data
    });
  });
});

लेकिन जब मैं अपलोड बटन पर क्लिक करता हूं, तो जावास्क्रिप्ट कंसोल इस त्रुटि को लौटाता है:

Uncaught TypeError: Illegal invocation 

jQuery त्रुटि

क्या आप मेरी मदद कर सकते हैं?


क्या तुम इसके बारे में निश्चित हो? dataType: 'json',???
प्रवीण कुमार पुरुषोत्तम

1
हां, इस प्रारूप में URL वापस आ जाएगा।
काइओ तारिफा

मेरे मामले में, मैं .NET MVC कंट्रोलर को डेटा के एक बड़े सेट के हिस्से के रूप में एक फ़ाइल सबमिट करना चाहता था जिसने इसकी कार्रवाई के पैरामीटर के रूप में क्रमबद्ध ऑब्जेक्ट को स्वीकार किया। एक फॉर्मडाटा ऑब्जेक्ट का उपयोग करना आवश्यक था, जैसा कि लिलिनाक्स द्वारा सुझाया गया है , साथ ही साथ ब्लेंडरprocessData: false द्वारा सुझाव दिया गया है , और साथ ही , कैओ तारिफा द्वारा सुझाया गया है । तीनों से कम कुछ भी काम नहीं आया। देखें [यह उत्तर] ( stackoverflow.com/a/3 contentType: false
nbrosz

जवाबों:


169

jQuery dataविशेषता को संसाधित करता है और मानों को स्ट्रिंग्स में परिवर्तित करता है।

processData: falseअपने विकल्प ऑब्जेक्ट में जोड़ना त्रुटि को ठीक करता है, लेकिन मुझे यकीन नहीं है कि यह समस्या को ठीक करता है।

डेमो: http://jsfiddle.net/eHmSr/1/


धन्यवाद, लेकिन मुझे इस संपत्ति को हटाने की आवश्यकता है, इस प्रश्न को देखें: stackoverflow.com/questions/12431760/…
काइओ तारिफा

22
मैं इसे ठीक कर रहा हूं, बस जोड़ रहा हूं contentType: false। एक बार फिर धन्यवाद!
कैयो टरीफा

@ ब्लेंडर यह समान कोड मेरे सिस्टम में काम कर रहा है लेकिन मेरे दोस्तों में नहीं है (दोनों विंडोज़ 10 का उपयोग कर रहे हैं), फ़ाइल पोस्ट नहीं हो रही है। कंसोल में कोई त्रुटि नहीं है।
सुचित कुमार

3
मेरे मामले में समस्या यह थी, कि मैंने var data = {} का उपयोग किया था; हालाँकि, आपको var data = new FormData () का उपयोग करना चाहिए;
लीलालिनक्स

मैं यह पता नहीं लगा सका कि यह काम क्यों नहीं कर रहा था ... जब तक मुझे एहसास नहीं हुआ कि इस प्रक्रिया को एक cनहीं, दो के साथ किया जाता है।
याकोव आइन्स्पैन

19

मुझे भी यही समस्या थी

मैंने तय किया कि दो विकल्पों का उपयोग करके

contentType: false
processData: false

वास्तव में मैंने इन दोनों कमांडों को अपने $ .ajax ({}) फंक्शन में जोड़ा


1
क्या इनका उपयोग $ .post के साथ किया जा सकता है? यदि हां, तो कैसे??
एलेक्स


3

मेरा अनुभव:

  var text = $('#myInputField');  
  var myObj = {title: 'Some title', content: text};  
  $.post(myUrl, myObj, callback);

समस्या यह है कि मैं $ के अंत में .val () जोड़ना भूल गया ('# myInputField'); इस कार्रवाई से मुझे यह पता लगाने में समय बर्बाद हो रहा है कि क्या गलत था, जिससे अवैध मंगलाचरण त्रुटि हुई , क्योंकि $ ('# myInputField') एक अलग फाइल में थी, क्योंकि उस सिस्टम ने गलत कोड बताया था। उम्मीद है कि यह उत्तर मदद करने के लिए एक ही गलती में साथियों को ढीला समय से बचने के लिए।


-2

मेरे मामले में, मापदंडों की सूची में एक गलती थी जो अच्छी तरह से नहीं बनी थी। इसलिए सुनिश्चित करें कि पैरामीटर अच्छी तरह से बने हैं। उदाहरण के लिए मापदंडों का सही प्रारूप

data: {'reporter': reporter,'partner': partner,'product': product}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.