jQuery AJAX ফর্ম জমা দিন


937

নাম orderproductFormএবং একটি অপরিজ্ঞাত সংখ্যক ইনপুট সহ আমার একটি ফর্ম রয়েছে ।

আমি একধরনের jQuery.get বা এজাক্স বা এর মতো কিছু করতে চাই যা এজাক্সের মাধ্যমে একটি পৃষ্ঠা কল করবে এবং ফর্মের সমস্ত ইনপুটগুলি প্রেরণ করবে orderproductForm

আমি মনে করি একটি উপায় হ'ল এটির মতো কিছু করা

jQuery.get("myurl",
          {action : document.orderproductForm.action.value,
           cartproductid : document.orderproductForm.cartproductid.value,
           productid : document.orderproductForm.productid.value,
           ...

তবে আমি ঠিক জানি না সমস্ত ফর্ম ইনপুট। এমন কোনও বৈশিষ্ট্য, ফাংশন বা এমন কিছু আছে যা কেবল সমস্ত ফর্ম ইনপুটগুলি প্রেরণ করবে?

উত্তর:


814

আপনি আজাক্স ফর্ম প্লাগইন বা জিক্যুরি সিরিয়ালাইজ ফাংশন থেকে অজ্যাক্সফর্ম / এজ্যাক্স সাবমিট ফাংশন ব্যবহার করতে পারেন ।

আজাক্সফর্ম :

$("#theForm").ajaxForm({url: 'server.php', type: 'post'})

অথবা

$("#theForm").ajaxSubmit({url: 'server.php', type: 'post'})

সাবমিট বাটন টিপলে অজেক্সফর্ম প্রেরণ করবে। এজ্যাক্স সাবমিট তাত্ক্ষণিক প্রেরণ করে।

সিরিয়াল করুন :

$.get('server.php?' + $('#theForm').serialize())

$.post('server.php', $('#theForm').serialize())

AJAX সিরিয়ালাইজেশন ডকুমেন্টেশন এখানে


2
আকর্ষণীয় ধারণা, তবে, আমি যে সার্ভারটির দিকে কল করছি তাতে আমি নিয়ন্ত্রণ করি না, তাই আমি এটি সিরিয়ালযুক্ত ডেটা পাঠাতে পারি না
নাথান এইচ

25
হ্যাঁ আপনি পারেন, নামটি কী করবে তা গুরুত্বপূর্ণ নয় হ'ল প্রতিটি ফর্ম-কী এবং প্রতিটি ফর্ম-ভেরিয়েবলের জোড়া প্রেরণ।

6
এটি জিইটি কলটিতে ম্যানুয়ালি অ্যারেটিতে যে ডেটা রাখছেন সেটির মতোই এটি একটি ক্যোয়ারী স্ট্রিংয়ে সিরিয়ালযুক্ত করা হয়েছে। এটি আপনি যা চান তা আমি নিশ্চিত।
জাল

1
ওহ, আমি দেখতে পাচ্ছি, তারপরে আমি এই স্ট্রিংটি ইউটিআরএলটির শেষে যুক্ত কলটিতে যুক্ত করব। আমি ভাবছিলাম পিএইচপি সিরিয়ালীকরণ। দুঃখিত। ধন্যবাদ!
নাথান এইচ

238
.ajaxSubmit()/ .ajaxForm()মূল jQuery ফাংশন নয়
ইয়ারিন

1396

এটি একটি সাধারণ রেফারেন্স:

// this is the id of the form
$("#idForm").submit(function(e) {

    e.preventDefault(); // avoid to execute the actual submit of the form.

    var form = $(this);
    var url = form.attr('action');

    $.ajax({
           type: "POST",
           url: url,
           data: form.serialize(), // serializes the form's elements.
           success: function(data)
           {
               alert(data); // show response from the php script.
           }
         });


});

আমি এটি আপনাকে সাহায্য করে আশা করি।


46
তবে form.serialize () <ইনপুট টাইপ = "ফাইল"> আইই
macio এ

2
সাধারণ ফর্ম জমা দেওয়ার জন্য দুর্দান্ত উত্তর!
শিখ গীক

1
@ BjørnBørresen এর মতো, আপনি type: $(this).attr('method')যদি methodনিজের ফর্মটিতে বৈশিষ্ট্যটি ব্যবহার করেন তবে আপনি এটিও ব্যবহার করতে পারেন ।
djule5

2
উল্লেখ করার মতো বিষয় যে যেহেতু jQuery 1.8, .success, .error এবং। কমপ্লিট। ডোন, .ফেইল এবং .আলওয়ের পক্ষে অবমূল্যায়িত হয়েছে।
আদম

2
@ জনকারির মন্তব্য - দুর্দান্ত নিবন্ধ, দেখে মনে হচ্ছে এটি আর উপলভ্য নয়। এখানে একটি ব্যাপার এর সংরক্ষণাগার স্টপ (MIS) রিটার্ন মিথ্যা ব্যবহার হচ্ছে: jQuery এর ঘটনাবলী
KyleMit

455

ফর্ম উপাদানটিতে সংজ্ঞাযুক্ত বৈশিষ্ট্যগুলি ব্যবহার করে অন্য একই রকম সমাধান:

<form id="contactForm1" action="/your_url" method="post">
    <!-- Form input fields here (do not forget your name attributes). -->
</form>

<script type="text/javascript">
    var frm = $('#contactForm1');

    frm.submit(function (e) {

        e.preventDefault();

        $.ajax({
            type: frm.attr('method'),
            url: frm.attr('action'),
            data: frm.serialize(),
            success: function (data) {
                console.log('Submission was successful.');
                console.log(data);
            },
            error: function (data) {
                console.log('An error occurred.');
                console.log(data);
            },
        });
    });
</script>

নামের বৈশিষ্ট্যে একটি "" অন্তর্ভুক্ত থাকলে কীভাবে এটি করা যায় সে সম্পর্কে কোনও পরামর্শ? (সার্ভার-সাইড প্রয়োজনীয়তা, আমার ধারণা নয়)।
জোসেফ এঞ্জেলফ্রস্ট

এটি সম্পূর্ণ করতে এটিতে ত্রুটি কলব্যাক অন্তর্ভুক্ত করুন। কখনই কোনও ত্রুটি পাবে তা কখনই জানে না, সর্বদা এর জন্য অ্যাকাউন্ট করা উচিত।
অ্যারন-কোডিং

1
আপনি যদি পদ্ধতি বা ক্রিয়া সেট না করেন তবে তারা getযথাক্রমে ডিফল্ট এবং বর্তমান ইউআরএল। কোডটিতে এই ধারণাটি যুক্ত করার সাথে করতে পারে।
rybo111

1
প্রতি jQuery ডকুমেন্টেশন ( api.jquery.com/submit ), frm.submit (ফাংশন (ইভেন্ট) {..}); frm.on এর সমতুল্য ("জমা দিন", ফাংশন (ইভেন্ট)} ..});। আমার কাছে এটি আরও বেশি পঠনযোগ্য কারণ স্পষ্টতই স্পষ্ট যে আপনি যখন ইভেন্টটি বরখাস্ত করা হয় তখন সম্পাদনের জন্য কোনও উপাদানটির সাথে কোনও ইভেন্ট হ্যান্ডলার সংযুক্ত করছেন।
মেহমেট

177

আপনার মনে রাখা উচিত কয়েকটি বিষয়।

1. একটি ফর্ম জমা দেওয়ার বিভিন্ন উপায় রয়েছে

  • জমা বোতামটি ব্যবহার করে
  • এন্টার টিপে
  • জাভাস্ক্রিপ্টে জমা দেওয়ার ইভেন্টটি ট্রিগার করে
  • সম্ভবত ডিভাইস বা ভবিষ্যতের ডিভাইসের উপর নির্ভর করে আরও বেশি।

আমাদের ফর্ম জমা দেওয়ার ইভেন্টটি আবদ্ধ করা উচিত , বোতাম ক্লিক ইভেন্ট নয়। এটি আমাদের কোডটি এখনই এবং ভবিষ্যতে সমস্ত ডিভাইস এবং সহায়ক প্রযুক্তিতে কাজ করে তা নিশ্চিত করবে।

2. হাইজ্যাক্স

ব্যবহারকারীর জাভাস্ক্রিপ্ট সক্ষম নাও থাকতে পারে। একজন hijax প্যাটার্ন এখানে ভাল, যেখানে আমরা আলতো করে ফর্ম জাভাস্ক্রিপ্ট ব্যবহার নিয়ন্ত্রণ নিতে, কিন্তু এটা submittable যদি জাভাস্ক্রিপ্ট ব্যর্থ ছেড়ে।

আমাদের ফর্মটি থেকে URL এবং পদ্ধতিটি টানতে হবে, তাই এইচটিএমএল পরিবর্তন হলে আমাদের জাভাস্ক্রিপ্ট আপডেট করার দরকার নেই।

৩. নিরবচ্ছিন্ন জাভাস্ক্রিপ্ট

ব্যবহার event.preventDefault () এর পরিবর্তে রিটার্ন মিথ্যা যেমন বুদ্বুদ পর্যন্ত ঘটনা পারবেন ভাল অনুশীলন। এটি অন্যান্য স্ক্রিপ্টগুলিকে ইভেন্টে বাঁধা দেয়, উদাহরণস্বরূপ বিশ্লেষণী স্ক্রিপ্টগুলি যা ব্যবহারকারীর মিথস্ক্রিয়া পর্যবেক্ষণ করে।

দ্রুততা

আমাদের স্ক্রিপ্টটি ইনলাইন ratherোকানোর পরিবর্তে আমাদের আদর্শভাবে একটি বাহ্যিক স্ক্রিপ্ট ব্যবহার করা উচিত। আমরা স্ক্রিপ্ট ট্যাগ ব্যবহার করে পৃষ্ঠার শীর্ষ অংশে এটি লিঙ্ক করতে পারি, বা গতির জন্য পৃষ্ঠার নীচে এটিতে লিঙ্ক করতে পারি। স্ক্রিপ্টটি চুপচাপ ব্যবহারকারীর অভিজ্ঞতা বাড়িয়ে তুলবে, এমনভাবে নয়।

কোড

ধরে নিই যে আপনি উপরোক্ত সকলের সাথে একমত হয়েছেন এবং আপনি জমা দেওয়ার ইভেন্টটি ধরতে চান এবং এটি এজেএক্স (হাইজ্যাক্স প্যাটার্ন) এর মাধ্যমে পরিচালনা করতে চান, আপনি এরকম কিছু করতে পারেন:

$(function() {
  $('form.my_form').submit(function(event) {
    event.preventDefault(); // Prevent the form from submitting via the browser
    var form = $(this);
    $.ajax({
      type: form.attr('method'),
      url: form.attr('action'),
      data: form.serialize()
    }).done(function(data) {
      // Optionally alert the user of success here...
    }).fail(function(data) {
      // Optionally alert the user of an error here...
    });
  });
});

আপনি যখনই জাভাস্ক্রিপ্টের মাধ্যমে এমন কিছু ব্যবহার করে ফর্ম জমা দেওয়ার জন্য ম্যানুয়ালি ট্রিগার করতে পারেন:

$(function() {
  $('form.my_form').trigger('submit');
});

সম্পাদনা:

আমি সম্প্রতি এটি করতে হয়েছিল এবং একটি প্লাগইন লিখে শেষ করেছি।

(function($) {
  $.fn.autosubmit = function() {
    this.submit(function(event) {
      event.preventDefault();
      var form = $(this);
      $.ajax({
        type: form.attr('method'),
        url: form.attr('action'),
        data: form.serialize()
      }).done(function(data) {
        // Optionally alert the user of success here...
      }).fail(function(data) {
        // Optionally alert the user of an error here...
      });
    });
    return this;
  }
})(jQuery)

আপনার ফর্ম ট্যাগটিতে একটি ডেটা-অটোসোবিট বৈশিষ্ট্য যুক্ত করুন এবং আপনি এটি করতে পারেন:

এইচটিএমএল

<form action="/blah" method="post" data-autosubmit>
  <!-- Form goes here -->
</form>

জাতীয়

$(function() {
  $('form[data-autosubmit]').autosubmit();
});

2
আমি কীভাবে 'সম্পন্ন' এবং 'ব্যর্থ' ফাংশনে কলব্যাকগুলি যুক্ত করতে পারি? ।। মত $ ( 'ফর্ম [ডেটা-autosubmit]') কিছু autosubmit () সম্পন্ন (ফাংশন ({...}); সম্ভব?
ক্রুসেডার

1
হাই @ ক্রুসেডার - অবশ্যই, এই প্লাগইনটি এটি ফিরিয়ে না দেওয়ার পরিবর্তে, আপনি এটি অ্যাজ্যাক্স ইভেন্টটি ফিরিয়ে আনতে পারেন, তবে আপনি ঠিক এটির উপর চেইন করতে পারেন। পর্যায়ক্রমে আপনি প্লাগইন একটি সাফল্য কলব্যাক পেতে পারে।
সুপারলুমিনারি

আমি দেখতে পাচ্ছি না যে এখানে "জাভাস্ক্রিপ্ট ব্যর্থ হলে" কীভাবে এটি জমা দেওয়া যায়?
মেহমেট

@ এমমেট - জাভাস্ক্রিপ্ট অক্ষম থাকলে, ফর্মটি এখনও কেবল একটি ফর্ম। ব্যবহারকারী ক্লিকগুলি জমা দেয় এবং একটি নিয়মিত ব্রাউজার ভিত্তিক ফর্ম জমা পড়ে। আমরা এই প্রগতিশীল বর্ধন কল। আজকাল এটি এত বড় বিষয় নয় যেহেতু আধুনিক পর্দার পাঠকরা জাভাস্ক্রিপ্ট সমর্থন করে।
সুপারলুমিনিয়ার

@ এমমেট - প্রতিশ্রুতি কলব্যাকগুলি optionচ্ছিকভাবে একটি পরামিতি গ্রহণ করবে যাতে ডেটা রয়েছে।
সুপারলুমিনিয়ার

41

আপনি ফরম্যাটাও ব্যবহার করতে পারেন (তবে আইই তে উপলব্ধ নয়):

var formData = new FormData(document.getElementsByName('yourForm')[0]);// yourForm: form selector        
$.ajax({
    type: "POST",
    url: "yourURL",// where you wanna post
    data: formData,
    processData: false,
    contentType: false,
    error: function(jqXHR, textStatus, errorMessage) {
        console.log(errorMessage); // Optional
    },
    success: function(data) {console.log(data)} 
});

এভাবে আপনি ফর্মডেটা ব্যবহার করেন


8
আমি দেখি ফর্মডাটা এখন আইই 10 দ্বারা সমর্থিত। কয়েক বছরের মধ্যে এটি পছন্দসই সমাধান হবে।
সুপারলুমিনারি

3
এভাবে কী লাভ?
স্বাক্ষর করুন

1
@ সাইন ইন সুবিধা, যা প্রয়োজন তা কোনও প্লাগইন নয় এবং অনেক আধুনিক ব্রাউজারে কাজ করে।
খোফি

4
@ সাইন ইন ফর্মডেটা ফাইলগুলিও পরিচালনা করতে পারে (যদি আপনার ফর্মের মধ্যে এমন একটি ক্ষেত্র থাকে) তবে সিরিয়ালাইজ () কেবল এটি উপেক্ষা করে।
মেহমেট

আনকাচড টাইপ এরিয়ার: 'ফর্মডাটা' তৈরি করতে ব্যর্থ: প্যারামিটার 1 'এইচটিএমএল ফর্মএলমেন্ট' টাইপের নয়
রহিম।নাগোরি ২

28

সাধারণ সংস্করণ (চিত্র প্রেরণ করে না)

<form action="/my/ajax/url" class="my-form">
...
</form>
<script>
    (function($){
        $("body").on("submit", ".my-form", function(e){
            e.preventDefault();
            var form = $(e.target);
            $.post( form.attr("action"), form.serialize(), function(res){
                console.log(res);
            });
        });
    )(jQuery);
</script>

কোনও ফর্ম বা কোনও পৃষ্ঠায় সমস্ত ফর্মের অজেক্সফিকেশন অনুলিপি করে আটকান

এটি আলফ্রেকজভির উত্তরের একটি পরিবর্তিত সংস্করণ

  • এটি jQuery> = 1.3.2 এর সাথে কাজ করবে
  • দস্তাবেজ প্রস্তুত হওয়ার আগে আপনি এটি চালাতে পারেন
  • আপনি ফর্মটি সরিয়ে এবং পুনরায় যুক্ত করতে পারেন এবং এটি এখনও কার্যকর হবে
  • এটি ফর্মের "ক্রিয়া" বৈশিষ্ট্যে উল্লিখিত সাধারণ ফর্মের মতো একই স্থানে পোস্ট করবে

জাভাস্ক্রিপ্ট

jQuery(document).submit(function(e){
    var form = jQuery(e.target);
    if(form.is("#form-id")){ // check if this is the form that you want (delete this check to apply this to all forms)
        e.preventDefault();
        jQuery.ajax({
            type: "POST",
            url: form.attr("action"), 
            data: form.serialize(), // serializes the form's elements.
            success: function(data) {
                console.log(data); // show response from the php script. (use the developer toolbar console, firefox firebug or chrome inspector console)
            }
        });
    }
});

আমি আলফ্রেকজভের উত্তর সম্পাদনা করতে চেয়েছিলাম তবে এ থেকে খুব বেশি বিচ্যুত হয়েছিল তাই আলাদা উত্তর হিসাবে পোস্ট করার সিদ্ধান্ত নিয়েছে।

ফাইলগুলি প্রেরণ করে না, বোতামগুলিকে সমর্থন করে না, উদাহরণস্বরূপ একটি বোতামে ক্লিক করা (জমা দেওয়ার বোতাম সহ) ফর্ম ডেটা হিসাবে এটির মান প্রেরণ করে, তবে এটি এজ্যাক্স অনুরোধের কারণে বোতামের ক্লিকটি প্রেরণ করা হবে না।

বোতামগুলিকে সমর্থন করতে আপনি জমা দেওয়ার পরিবর্তে প্রকৃত বোতাম ক্লিক ক্যাপচার করতে পারেন।

jQuery(document).click(function(e){
    var self = jQuery(e.target);
    if(self.is("#form-id input[type=submit], #form-id input[type=button], #form-id button")){
        e.preventDefault();
        var form = self.closest('form'), formdata = form.serialize();
        //add the clicked button to the form data
        if(self.attr('name')){
            formdata += (formdata!=='')? '&':'';
            formdata += self.attr('name') + '=' + ((self.is('button'))? self.html(): self.val());
        }
        jQuery.ajax({
            type: "POST",
            url: form.attr("action"), 
            data: formdata, 
            success: function(data) {
                console.log(data);
            }
        });
    }
});

সার্ভার সাইডে আপনি এই হেডারটির সাথে একটি অজ্যাক্স অনুরোধ সনাক্ত করতে পারেন যা HTTP_X_REQUESTED_WITH পিএইচপি জন্য jquery সেট করে

পিএইচপি

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    //is ajax
}

আপনি যদি এই ফর্মটি সহ কোনও ফাইল প্রেরণ করতে চান তবে এটি কীভাবে কাজ করবে?
ইয়ামি মদিনা

1
@ ইয়ামিমিদিনা এটি কোনও সহজ সমাধান নয়, আপনাকে ফাইলের ডেটা সহ সম্পূর্ণ অনুরোধটি আলাদা ফরম্যাটে (মাল্টিপার্ট ফর্ম্যাট) প্রেরণ করতে হবে
টিমো হুভিনেন

22

এই কোডটি ফাইল ইনপুট দিয়েও কাজ করে

$(document).on("submit", "form", function(event)
{
    event.preventDefault();        
    $.ajax({
        url: $(this).attr("action"),
        type: $(this).attr("method"),
        dataType: "JSON",
        data: new FormData(this),
        processData: false,
        contentType: false,
        success: function (data, status)
        {

        },
        error: function (xhr, desc, err)
        {


        }
    });        
});

3
কেবলমাত্র ফর্মডাটা () নোট করুন IE10 + বিকাশকারী.মোজিলা.আর.ইন.ইউএস
ক্রিস হপকিন্স

1
ডেটা টাইপ: 'json' গুরুত্বপূর্ণ যদি আপনি form.serialize () ব্যবহার করতে চান
ডেভিড

বাহ, এই ফর্মডাটা দুর্দান্ত! Array.from(new FormData(form))কারওর প্রয়োজনে: এই ফর্মডাটা পুনরুক্তি পুনরুক্তকরণ :)
টেস্ট 30

13

আমি সত্যিই পছন্দ করেছে এই উত্তরটি দ্বারা superluminary একটি এবং বিশেষ করে তিনি যেভাবে আবৃত সমাধান jQuery এর প্লাগইন। সুতরাং খুব দরকারী উত্তরের জন্য অতিমানবিক ধন্যবাদ । যদিও আমার ক্ষেত্রে, আমি এমন একটি প্লাগইন চেয়েছিলাম যা প্লাগইন শুরু হওয়ার সাথে সাথে বিকল্পগুলির মাধ্যমে সাফল্য এবং ত্রুটি ইভেন্ট হ্যান্ডলারের সংজ্ঞা দিতে দেয় ।

সুতরাং আমি এখানে এলাম:

;(function(defaults, $, undefined) {
    var getSubmitHandler = function(onsubmit, success, error) {
        return function(event) {
            if (typeof onsubmit === 'function') {
                onsubmit.call(this, event);
            }
            var form = $(this);
            $.ajax({
                type: form.attr('method'),
                url: form.attr('action'),
                data: form.serialize()
            }).done(function() {
                if (typeof success === 'function') {
                    success.apply(this, arguments);
                }
            }).fail(function() {
                if (typeof error === 'function') {
                    error.apply(this, arguments);
                }
            });
            event.preventDefault();
        };
    };
    $.fn.extend({
        // Usage:
        // jQuery(selector).ajaxForm({ 
        //                              onsubmit:function() {},
        //                              success:function() {}, 
        //                              error: function() {} 
        //                           });
        ajaxForm : function(options) {
            options = $.extend({}, defaults, options);
            return $(this).each(function() {
                $(this).submit(getSubmitHandler(options['onsubmit'], options['success'], options['error']));
            });
        }
    });
})({}, jQuery);

এই প্লাগ আমাকে খুব সহজেই "ajaxify" পৃষ্ঠাতে এইচটিএমএল ফর্ম এবং প্রদান করতে দেয় onsubmit , সাফল্য এবং ত্রুটি ফর্ম জমা অবস্থা ব্যবহারকারী প্রতিক্রিয়া বাস্তবায়নের জন্য ইভেন্ট হ্যান্ডলার। এটি প্লাগইনটিকে নিম্নলিখিত হিসাবে ব্যবহারের অনুমতি দিয়েছে:

 $('form').ajaxForm({
      onsubmit: function(event) {
          // User submitted the form
      },
      success: function(data, textStatus, jqXHR) {
          // The form was successfully submitted
      },
      error: function(jqXHR, textStatus, errorThrown) {
          // The submit action failed
      }
 });

নোট করুন যে সাফল্য এবং ত্রুটির ইভেন্ট হ্যান্ডলারগুলি একই যুক্তিগুলি গ্রহণ করে যা আপনি jQuery এজাক্স পদ্ধতির সম্পর্কিত ইভেন্টগুলি থেকে পাবেন would


9

আমি আমার জন্য নিম্নলিখিত পেয়েছি:

formSubmit('#login-form', '/api/user/login', '/members/');

কোথায়

function formSubmit(form, url, target) {
    $(form).submit(function(event) {
        $.post(url, $(form).serialize())
            .done(function(res) {
                if (res.success) {
                    window.location = target;
                }
                else {
                    alert(res.error);
                }
            })
            .fail(function(res) {
                alert("Server Error: " + res.status + " " + res.statusText);

            })
        event.preventDefault();
    });
}

এটি পোস্টটি ধরে নিয়েছে 'url' রূপে একটি এজাক্স দেয় {success: false, error:'my Error to display'}

আপনি নিজের পছন্দ মত এটি পরিবর্তন করতে পারেন। এই স্নিপেটটি নির্দ্বিধায় ব্যবহার করুন।


1
targetএখানে কি জন্য? আপনি কেবল নতুন পৃষ্ঠায় পুনঃনির্দেশের জন্য কেন এজেএক্সের সাথে একটি ফর্ম জমা দেবেন?
1252748

9

jQuery AJAX ফর্ম জমা দিন , আপনি যখন কোনও বোতামে ক্লিক করেন তখন ফর্ম আইডি ব্যবহার করে ফর্ম জমা দেওয়ার কিছুই নয়

দয়া করে পদক্ষেপগুলি অনুসরণ করুন

পদক্ষেপ 1 - ফর্ম ট্যাগের একটি আইডি ক্ষেত্র থাকতে হবে

<form method="post" class="form-horizontal" action="test/user/add" id="submitForm">
.....
</form>

আপনি ক্লিক করতে যা যা বাটন

<button>Save</button>

পদক্ষেপ 2 - জমা দিন ইভেন্ট jQuery যা একটি ফর্ম জমা দিতে সহায়তা করে। নীচের কোডে আমরা এইচটিএমএল উপাদানটির নাম থেকে জেএসএন অনুরোধ প্রস্তুত করছি ।

$("#submitForm").submit(function(e) {
    e.preventDefault();
    var frm = $("#submitForm");
    var data = {};
    $.each(this, function(i, v){
        var input = $(v);
        data[input.attr("name")] = input.val();
        delete data["undefined"];
    });
    $.ajax({
        contentType:"application/json; charset=utf-8",
        type:frm.attr("method"),
        url:frm.attr("action"),
        dataType:'json',
        data:JSON.stringify(data),
        success:function(data) {
            alert(data.message);
        }
    });
});

লাইভ ডেমো জন্য নীচের লিঙ্কে ক্লিক করুন

JQuery AJAX ব্যবহার করে কীভাবে একটি ফর্ম জমা করবেন?


5

ব্যবহার বিবেচনা করুন closest

$('table+table form').closest('tr').filter(':not(:last-child)').submit(function (ev, frm) {
        frm = $(ev.target).closest('form');
        $.ajax({
            type: frm.attr('method'),
            url: frm.attr('action'),
            data: frm.serialize(),
            success: function (data) {
                alert(data);
            }
        })
        ev.preventDefault();
    });

5

আমি জানি এটি একটি jQueryসম্পর্কিত প্রশ্ন, তবে এখন জেএস ইএস 6 জিনিসগুলির সাথে দিনগুলি অনেক সহজ। যেহেতু কোনও শুদ্ধ javascriptউত্তর নেই, তাই আমি ভেবেছিলাম আমি এটির একটি সহজ খাঁটি javascriptসমাধান যোগ করতে পারি , যা আমার মতে fetch()এপিআই ব্যবহার করে বেশ পরিস্কার is নেটওয়ার্ক অনুরোধগুলি কার্যকর করার জন্য এটি একটি আধুনিক উপায়। আপনার ক্ষেত্রে, আপনার ইতিমধ্যে একটি ফর্ম উপাদান রয়েছে বলে আমরা আমাদের অনুরোধটি তৈরি করতে কেবল এটি ব্যবহার করতে পারি।

const form = document.forms["orderproductForm"];
const formInputs = form.getElementsByTagName("input"); 
let formData = new FormData(); 
for (let input of formInputs) {
    formData.append(input.name, input.value); 
}

fetch(form.action,
    {
        method: form.method,
        body: formData
    })
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.log(error.message))
    .finally(() => console.log("Done"));

4

একাধিক ফর্মডাটা প্রেরণ এড়ানোর জন্য:

পুনরায় জমা দেওয়ার আগে ইভেন্টটি আনবাইন্ড করতে ভুলবেন না, ব্যবহারকারী একাধিকবার স্যামবিট ফাংশনটিতে কল করতে পারে, সম্ভবত সে কিছু ভুলে গিয়েছিল, বা একটি বৈধতা ত্রুটি ছিল।

 $("#idForm").unbind().submit( function(e) {
  ....

4

আপনি যদি ফর্ম .সিরিয়ালাইজ () ব্যবহার করেন - আপনার প্রতিটি ফর্মের উপাদানটির নাম দেওয়া দরকার:

<input id="firstName" name="firstName" ...

এবং ফর্মটি এভাবে সিরিয়ালযুক্ত হয়:

firstName=Chris&lastName=Halcrow ...

4

আপনি নীচের মত জমা ফাংশন এ ব্যবহার করতে পারেন।

এইচটিএমএল ফর্ম

<form class="form" action="" method="post">
    <input type="text" name="name" id="name" >
    <textarea name="text" id="message" placeholder="Write something to us"> </textarea>
    <input type="button" onclick="return formSubmit();" value="Send">
</form>

jQuery ফাংশন:

<script>
    function formSubmit(){
        var name = document.getElementById("name").value;
        var message = document.getElementById("message").value;
        var dataString = 'name='+ name + '&message=' + message;
        jQuery.ajax({
            url: "submit.php",
            data: dataString,
            type: "POST",
            success: function(data){
                $("#myForm").html(data);
            },
            error: function (){}
        });
    return true;
    }
</script>

আরও বিশদ এবং নমুনার জন্য দেখুন: http://www.spidercode.com/simple-ajax-contact-form/


2

এটি ওপির প্রশ্নের উত্তর নয়,
তবে আপনি যদি স্ট্যাটিক ফর্ম ডিওএম ব্যবহার করতে না পারেন তবে আপনিও এটি চেষ্টা করতে পারেন।

var $form = $('<form/>').append(
    $('<input/>', {name: 'username'}).val('John Doe'),
    $('<input/>', {name: 'user_id'}).val('john.1234')
);

$.ajax({
    url: 'api/user/search',
    type: 'POST',
    contentType: 'application/x-www-form-urlencoded',
    data: $form.serialize(),
    success: function(data, textStatus, jqXHR) {
        console.info(data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        var errorMessage = jqXHR.responseText;
        if (errorMessage.length > 0) {
            alert(errorMessage);
        }
    }
});

2

চেষ্টা

fetch(form.action,{method:'post', body: new FormData(form)});


1

কেবল একটি বন্ধুত্বপূর্ণ অনুস্মারক যা dataকোনও বস্তু হতে পারে:

$('form#foo').submit(function () {
    $.ajax({
        url: 'http://foo.bar/some-ajax-script',
        type: 'POST',
        dataType: 'json',
        data: {
            'foo': 'some-foo',
            'bar': 'some-bar'
        }
    }).always(function (data) {
        console.log(data);
    });

    return false;
});

1

জাভাস্ক্রিপ্ট

(function ($) {
    var form= $('#add-form'),
      input = $('#exampleFormControlTextarea1');


   form.submit(function(event) {

       event.preventDefault(); 

       var req = $.ajax({
           url: form.attr('action'),
           type: 'POST',
           data: form.serialize()
       });
    req.done(function(data) {
       if (data === 'success') {
           var li = $('<li class="list-group-item">'+ input.val() +'</li>');
            li.hide()
                .appendTo('.list-group')
                .fadeIn();
            $('input[type="text"],textarea').val('');
        }
   });
});


}(jQuery));

এইচটিএমএল

    <ul class="list-group col-sm-6 float-left">
            <?php
            foreach ($data as $item) {
                echo '<li class="list-group-item">'.$item.'</li>';
            }
            ?>
        </ul>

        <form id="add-form" class="col-sm-6 float-right" action="_inc/add-new.php" method="post">
            <p class="form-group">
                <textarea class="form-control" name="message" id="exampleFormControlTextarea1" rows="3" placeholder="Is there something new?"></textarea>
            </p>
            <button type="submit" class="btn btn-danger">Add new item</button>
        </form>

-21

জমা দেওয়ার ইভেন্টটিও রয়েছে, যা এই $ ("# ফর্ম_আইডি") এর মতো ট্রিগার হতে পারে submit জমা দিন ()। যদি এই ফর্মটি ইতিমধ্যে এইচটিএমএলে ভালভাবে উপস্থাপিত হয় তবে আপনি এই পদ্ধতিটি ব্যবহার করবেন। আপনি কেবল পৃষ্ঠায় পড়তে চাইবেন, স্টাফ সহ ফর্ম ইনপুটগুলি বিশিষ্ট করুন, তারপরে .submit () কল করুন। এটি ফর্মের ঘোষণায় সংজ্ঞায়িত পদ্ধতি এবং ক্রিয়া ব্যবহার করবে, সুতরাং আপনার এটি আপনার জাভাস্ক্রিপ্টে অনুলিপি করার দরকার নেই।

উদাহরণ


58
আপনি যদি আপনার পোস্ট মুছে ফেলেন তবে আপনি যে পেনাল্টি পয়েন্টগুলি পিছনে পিছনে নিয়ে গিয়েছেন তা পেয়ে যাবেন।
স্পার্কস্পাইডার

2
এটি ফর্মটি জমা দেবে, তবে এজেএক্সের মাধ্যমে নয়, সুতরাং প্রশ্নের উত্তর দেয় না।
সুপারলুমিনারি

11
@ স্পাইডার কী বলেছে, প্লাস আপনি "পিয়ার প্রেসার" নামে একটি দুর্দান্ত ব্যাজ
পেয়েছেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.