ইন্টারফেস ফর্মডাটা প্রয়োগ করে না এমন একটি বস্তুর উপরে 'অ্যাপেন্ড' ডাকা হয়েছে


89

আমি jquery এবং ajax দিয়ে ছবি আপলোড করার চেষ্টা করছি। তবে অদ্ভুত জিনিসটি এখানে ঘটেছে। কনসোলে এটির প্রদর্শন লগ করুন

প্রকারের ত্রুটি: 'অ্যাপেন্ড' এমন একটি বস্তুর উপরে কল করা হয়েছে যা ইন্টারফেস ফর্মডাটা প্রয়োগ করে না।

দয়া করে বলুন আমি এখানে কী ভুল করেছি?

জেএস স্ক্রিপ্ট

var prosrc=$("#pro_pix img").last().attr("src");
$("#logoform").on('change',function(event){
var postData = new FormData(this);
$("#pro_pix img").last().hide();
$("#pro_pix img").first().show();
event.preventDefault();
$.ajax(
    {
        url : "/function/pro_pic_upload.php",
        type: "POST",
        data : postData,
        success:function(data, textStatus, jqXHR)
        {
        $("#pro_pix img").last().show();
        $("#pro_pix img").first().hide();
        $("#pro_pix h6").text(data);
        },
        error: function(jqXHR, textStatus, errorThrown)
        {
            //if fails     
        }
    });
});

আমার এইচটিএমএল মার্কআপ

 <div class="row">
    <!-- left column -->
    <div id="pro_pix" class="col-md-4 col-sm-6 col-xs-12">
      <div class="text-center">
        <img src="template/image/725.GIF" class="avatar img-circle img-thumbnail" style="display:none" alt="avatar">
        <img src="<?php echo $rowuser['profile_logo']; ?>" class="avatar img-circle img-thumbnail" alt="avatar">
        <h6>Upload a different photo...</h6>
        <form role="form" id="logoform" enctype="multipart/form-data">
        <input id="logo" name="logo" type="file" class="text-center center-block well well-sm">
        </form>
      </div>
    </div>

উত্তর:


187

jquery সহ formdata ব্যবহার করার জন্য আপনাকে সঠিক বিকল্পগুলি সেট করতে হবে

$.ajax({
    url : "/function/pro_pic_upload.php",
    type: "POST",
    data : postData,
    processData: false,
    contentType: false,
    success:function(data, textStatus, jqXHR){
        $("#pro_pix img").last().show();
        $("#pro_pix img").first().hide();
        $("#pro_pix h6").text(data);
    },
    error: function(jqXHR, textStatus, errorThrown){
        //if fails     
    }
});

.ajax রেফারেন্স

প্রক্রিয়াডাটা (ডিফল্ট: সত্য)

প্রকার: বুলিয়ান

ডিফল্টরূপে, ডেটা বিকল্প হিসাবে ডেটা বিকল্পে পাস করা ডেটা (প্রযুক্তিগতভাবে, স্ট্রিং ব্যতীত অন্য যে কোনও কিছু) প্রক্রিয়াজাত করা হবে এবং একটি ক্যোয়ারী স্ট্রিংয়ে রূপান্তরিত হবে, ডিফল্ট কনটেন্ট-টাইপ "অ্যাপ্লিকেশন / x-www-form-urlencoded" । আপনি যদি কোনও ডিওএমডোকামেন্ট, বা অন্যান্য প্রক্রিয়াজাত না করা ডেটা প্রেরণ করতে চান তবে এই বিকল্পটিকে মিথ্যা হিসাবে সেট করুন।


আমার একটা বিভ্রান্তি আছে তুমি কি আমাকে সাহায্য করবে? মনে করুন আমি একটি অ্যারে সহ একটি ফাইল এবং একটি স্ট্রিং প্রেরণ করতে চাই। ধরুন আমার স্ক্রিপ্টে আমি ইমেজ ফাইল এবং ব্যবহারকারীর নাম সহ একটি স্ট্রিং প্রেরণ করতে চাই। কিভাবে যে কি? ফাইল এবং স্ট্রিং একসাথে ধরে রাখতে কোনও জসন বা এক্সএমএল বা অন্য কোনও অ্যারে তৈরি করা কি সম্ভব? আমি শিক্ষানবিস এই নির্বোধ প্রশ্ন হতে পারে। আমার আপনার সহায়তা দরকার ..

4
আইটেমগুলি যুক্ত করতে কেবল ফর্মডাটা অবজেক্টের সংযোজন পদ্ধতিটি কল করুন:postData.append("name",value);
প্যাট্রিক ইভান্স

অবজেক্টের মতো জটিল আইটেমগুলির জন্য দ্রষ্টব্য, যেমন: {cat:"meow",dog:"bark"}আপনাকে প্রথমে JSON.stringify ব্যবহার করতে হবে: postData.append("name",JSON.stringify(someObject));এবং সার্ভারের শেষে জসনকে পার্স করুন
প্যাট্রিক ইভান্স

4
ভুলে যাবেন না: cache: false এটি এখনই আমাকে সমস্যা দিয়েছে। এটি সব ঠিক আছে।
জুন

আপনাকে ধন্যবাদ, আমি এই সমস্যাটি গত এক ঘন্টা ধরে আটকে রেখেছি!
ব্যবহারকারী 752746

34

আপনার সমস্যা সমাধানের জন্য আপনার এজেএক্সে এই দুটি পরামিতি যুক্ত করুন:

processData: false,
contentType: false,

ভুলে যাবেন না: cache: falseএটি এখনই আমাকে সমস্যা দিয়েছে। এটি সব ঠিক আছে।
জুন

@ জ্রি, এর মানে কী cache: false?
ফাতেহ মের্ট দোয়ানকান

JQuery ডকুমেন্টেশন থেকে: ক্যাশে (ডিফল্ট: সত্য, ডেটা টাইপ 'স্ক্রিপ্ট' এবং 'jsonp' এর জন্য মিথ্যা) প্রকার: বুলিয়ান যদি মিথ্যাতে সেট করা থাকে, তবে এটি অনুরোধ করা পৃষ্ঠাগুলিকে ব্রাউজার দ্বারা ক্যাশে না করতে বাধ্য করবে। দ্রষ্টব্য: মিথ্যাতে ক্যাশে সেট করা কেবলমাত্র HEAD এবং GET অনুরোধের সাথে সঠিকভাবে কাজ করবে। এটি জিইটি প্যারামিটারগুলিতে "_ = {টাইমস্ট্যাম্প}" যুক্ত করে কাজ করে। জিইটি দ্বারা ইতিমধ্যে অনুরোধ করা একটি ইউআরএল-এ যখন কোনও পোস্ট করা হয় তখন আইই 8 ব্যতীত অন্যান্য ধরণের অনুরোধগুলির জন্য প্যারামিটারের প্রয়োজন হয় না।
জ্রি

4
@ জ্রি আপনি হয়ত একটি GETঅনুরোধ ব্যবহার করছেন । cache:falseজন্য ঠিকমত কাজ করবে না POSTঅনুরোধ। আপনি উপরের মন্তব্যে যেমন উল্লেখ করেছেন, এটি কেবলমাত্র অনুরোধের জন্য HEADএবং কাজ করে GET। এবং FormDataএকটি ফর্ম ডেটা জমা দেওয়ার জন্য ব্যবহৃত হয় যা এর POSTপরিবর্তে হওয়া উচিত GET। সুতরাং আমি আপনাকে ফর্ম ডেটা জমা দেওয়ার জন্য সর্বদা পোস্ট ব্যবহার করার পরামর্শ দিই।
ভাগ্যবান


2

যোগ করা হচ্ছে:

processData: false,
contentType: false,

ফাইলটির সাথে অবশ্যই সহায়তা করবে, এর একদিকে যদি আপনি কোনও পৃষ্ঠায় ফিরে যাওয়া ত্রুটি বা সাফল্যের বার্তাগুলি করছেন তবে আপনি আপনার জীবনকে আরও সহজ করার জন্য json ব্যবহার করতে চাইবেন।

উদাহরণ:

dataType: 'json',

এটি আপনার প্রতিক্রিয়াগুলি বিশ্লেষণে সহায়তা করবে। এটি ছাড়া এটি ত্রুটি ছুঁড়ে দেবে।


0

শুধু আপনার লাইন সম্পাদনা করুন:

var postData = new FormData(this);

প্রতি:

var postData = new FormData($(this));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.