আমার একটি jQuery এজাক্স ফাংশন রয়েছে এবং পোস্ট ডেটা হিসাবে পুরো ফর্মটি জমা দিতে চাই। আমরা ক্রমাগত ফর্মটি আপডেট করছি তাই অনুরোধে প্রেরিত হওয়া ফর্ম ইনপুটগুলি ক্রমাগত আপডেট করা ক্লান্তিকর হয়ে ওঠে।
আমার একটি jQuery এজাক্স ফাংশন রয়েছে এবং পোস্ট ডেটা হিসাবে পুরো ফর্মটি জমা দিতে চাই। আমরা ক্রমাগত ফর্মটি আপডেট করছি তাই অনুরোধে প্রেরিত হওয়া ফর্ম ইনপুটগুলি ক্রমাগত আপডেট করা ক্লান্তিকর হয়ে ওঠে।
উত্তর:
এখানে একটি ফাংশন রয়েছে যা হুবহু এটি করে:
http://api.jquery.com/serialize/
var data = $('form').serialize();
$.post('url', data);
person[0].firstName
person[0].lastName
person[1].firstName
person[1].lastName
<input name="person[1].lastName">
?
সিরিয়ালাইজ () পোস্টের পদ্ধতি সহ কোনও ফর্ম প্রেরণ করতে চাইলে ভাল ধারণা নয়। উদাহরণস্বরূপ আপনি যদি এজ্যাক্সের মাধ্যমে কোনও ফাইল পাস করতে চান তবে এটি কাজ করবে না।
মনে করুন যে এই আইডি সহ আমাদের একটি ফর্ম রয়েছে: "মাইফর্ম"।
আরও ভাল সমাধান হ'ল একটি ফর্মডাটা তৈরি করে এটি পাঠানো:
var myform = document.getElementById("myform");
var fd = new FormData(myform );
$.ajax({
url: "example.php",
data: fd,
cache: false,
processData: false,
contentType: false,
type: 'POST',
success: function (dataofconfirm) {
// do something with the result
}
});
var
, উভয়ের জন্য আপনাকে ধন্যবাদ !
form.serialize()
তবে ফাইল আপলোডের জন্য এটি কার্যকর হয়নি। new FormData(this)
সুন্দরভাবে কাজ করেছেন
serialize()
ফর্ম উপাদান ব্যবহার করে সাধারণভাবে ।
দয়া করে মনে রাখবেন যে একাধিক <সিলেক্ট> বিকল্পগুলি একই কী এর অধীনে ক্রমিক করা হয়, যেমন
<select id="foo" name="foo" multiple="multiple">
<option value="1">one</option>
<option value="2">two</option>
<option value="3">three</option>
</select>
একই ক্যোয়ারী প্যারামিটারের একাধিক উপস্থিতি অন্তর্ভুক্ত একটি ক্যোয়ারী স্ট্রিংয়ের ফলাফল করবে:
[path]?foo=1&foo=2&foo=3&someotherparams...
যা আপনি ব্যাকএন্ডে চান তা নাও হতে পারে।
আমি এই জেএস কোডটি একাধিক পরামিতি কমা-বিচ্ছিন্ন একক কীতে হ্রাস করতে ব্যবহার করেছি (জন রেসিগের জায়গায় একটি থ্রেডে মন্তব্যকারীর প্রতিক্রিয়া থেকে নির্লজ্জভাবে অনুলিপি করা হয়েছে):
function compress(data) {
data = data.replace(/([^&=]+=)([^&]*)(.*?)&\1([^&]*)/g, "$1$2,$4$3");
return /([^&=]+=).*?&\1/.test(data) ? compress(data) : data;
}
যা উপরোক্তগুলিকে রূপান্তরিত করে:
[path]?foo=1,2,3&someotherparams...
আপনার জেএস কোডে আপনি এটিকে এটি কল করবেন:
var inputs = compress($("#your-form").serialize());
আশা করি এইটি কাজ করবে.
ব্যবহার
var str = $("form").serialize();
কোনও প্রশ্নের স্ট্রিংয়ে একটি ফর্মটি সিরিয়াল করুন, এটি একটি অ্যাজাক্স অনুরোধে একটি সার্ভারে প্রেরণ করা যেতে পারে।
এই কাজ করতে একটি ভাল jQuery এর বিকল্প মাধ্যমে হয় FormData । কোনও ফর্মের মাধ্যমে ফাইল প্রেরণের সময় এই পদ্ধতিটিও উপযোগী!
<form id='test' method='post' enctype='multipart/form-data'>
<input type='text' name='testinput' id='testinput'>
<button type='submit'>submit</button>
</form>
JQuery এ আপনার প্রেরণ ফাংশনটি দেখতে এইরকম হবে:
$( 'form#test' ).submit( function(){
var data = new FormData( $( 'form#test' )[ 0 ] );
$.ajax( {
processData: false,
contentType: false,
data: data,
dataType: 'json',
type: $( this ).attr( 'method' );
url: 'yourapi.php',
success: function( feedback ){
console.log( "the feedback from your API: " + feedback );
}
});
আপনার ফর্মটিতে ডেটা যুক্ত করতে আপনি হয় আপনার ফর্মটিতে একটি লুকানো ইনপুট ব্যবহার করতে পারেন, বা আপনি উড়তে যোগ করতে পারেন:
var data = new FormData( $( 'form#test' )[ 0 ] );
data.append( 'command', 'value_for_command' );
url: $(this).attr('action'),
পরিবর্তে ফর্ম ব্যবহারের "ক্রিয়া" বৈশিষ্ট্য থেকে url নিষ্কাশন করতে
আপনাকে কেবল ডেটা পোস্ট করতে হবে। এবং jquery আজাক্স ফাংশন সেট পরামিতি ব্যবহার করে। এখানে একটি উদাহরণ।
<script>
$(function () {
$('form').on('submit', function (e) {
e.preventDefault();
$.ajax({
type: 'post',
url: 'your_complete url',
data: $('form').serialize(),
success: function (response) {
//$('form')[0].reset();
// $("#feedback").text(response);
if(response=="True") {
$('form')[0].reset();
$("#feedback").text("Your information has been stored.");
}
else
$("#feedback").text(" Some Error has occured Errror !!! ID duplicate");
}
});
});
});
</script>
অন্যান্য সমাধানগুলি আমার পক্ষে কার্যকর হয়নি। সম্ভবত আমি যে প্রকল্পে কাজ করছি তাতে পুরানো ডিওসিটিইপিই HTML5 বিকল্পগুলি প্রতিরোধ করে preven
আমার সমাধান:
<form id="form_1" action="result.php" method="post"
onsubmit="sendForm(this.id);return false">
<input type="hidden" name="something" value="1">
</form>
JS:
function sendForm(form_id){
var form = $('#'+form_id);
$.ajax({
type: 'POST',
url: $(form).attr('action'),
data: $(form).serialize(),
success: function(result) {
console.log(result)
}
});
}