this (এটি) .সিরিয়ালাইজ () - কীভাবে একটি মান যুক্ত করবেন?


104

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

$.ajax({
    type: 'POST',
    url: this.action,
    data: $(this).serialize(),
});

এটি দুর্দান্ত কাজ করে, তবে আমি ডেটাতে একটি মান যুক্ত করতে চাই, তাই চেষ্টা করেছি I

$.ajax({
    type: 'POST',
    url: this.action,
    data: $(this).serialize() + '&=NonFormValue' + NonFormValue,
});

কিন্তু এটি সঠিকভাবে পোস্ট করেনি। কীভাবে আপনি সিরিয়ালাইজ স্ট্রিংয়ে কোনও আইটেম যুক্ত করতে পারেন তার কোনও ধারণা? এটি একটি গ্লোবাল পৃষ্ঠা পরিবর্তনশীল যা ফর্ম নির্দিষ্ট নয়।


"যে সঠিকভাবে পোস্ট করেনি" এর অর্থ কী আপনি পরিষ্কার করতে পারেন? কি হলো? সার্ভারের মাধ্যমে কী প্রাপ্ত হয়েছিল?
ম্যাট বি

6
তা কি হওয়া উচিত নয় '&NonFormValue=' + NonFormValue?
ওয়েসলি মার্চ

উত্তর:


103

পরিবর্তে

 data: $(this).serialize() + '&=NonFormValue' + NonFormValue,

আপনি সম্ভবত চান

 data: $(this).serialize() + '&NonFormValue=' + NonFormValue,

NonFormValueএটিতে যদি কোনও বিশেষ অক্ষর থাকতে পারে তবে এর মানটি ইউআরএল-এনকোড করা উচিত ।


1
এর কোনও বিশেষ চরিত্র না রয়েছে encodeURIComponentতা নিশ্চিত করতে ব্যবহার করুনNonFormValue
ইয়াহিয়া উদ্দিন

196

যখন ম্যাট বি এর উত্তর কাজ করবে, আপনি .serializeArray()ফর্ম ডেটা থেকে অ্যারে পেতে, এটি পরিবর্তন করতে এবং jQuery.param()এটি ইউআরএল-এনকোডযুক্ত ফর্মে রূপান্তর করতেও ব্যবহার করতে পারেন । এইভাবে, jQuery আপনার জন্য আপনার অতিরিক্ত ডেটার সিরিয়ালাইজেশন পরিচালনা করে।

var data = $(this).serializeArray(); // convert form to array
data.push({name: "NonFormValue", value: NonFormValue});
$.ajax({
    type: 'POST',
    url: this.action,
    data: $.param(data),
});

14
এটি অবশ্যই সেরা বিকল্প - সিরিয়ালটিকে পুরোপুরি jQuery এ রেখেছেন, যদিও এখনও ফর্মটি থেকে পুনরুদ্ধারকারীদের মধ্যে নতুন মান যুক্ত করার ক্ষমতা রয়েছে।
jcsanyi

5
এটি করার সর্বোত্তম উপায়, স্ট্রিংগুলির সাথে খেলছে না
ব্রেট গ্রেগসন

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। পরিষ্কার এবং সঠিক উপায়
মাইক অ্যারন

7

প্রথমত করা উচিত নয়

data: $(this).serialize() + '&=NonFormValue' + NonFormValue,

থাকা

data: $(this).serialize() + '&NonFormValue=' + NonFormValue,

এবং দ্বিতীয়ত আপনি ব্যবহার করতে পারেন

url: this.action + '?NonFormValue=' + NonFormValue,

বা যদি ক্রিয়াটিতে ইতিমধ্যে কোনও পরামিতি রয়েছে

url: this.action + '&NonFormValue=' + NonFormValue,

আপনার দ্বিতীয় উত্তরটিতে প্রশ্নটির অনুরূপ প্রভাব থাকবে না; NonFormValueকোনও ইউআরএল প্যারামিটার হিসাবে প্রেরণ করা হবে, পোস্ট করা ডেটা নয়। এটি আদর্শ নাও হতে পারে যদি ক) সার্ভার সাইডে যা কিছু চলমান থাকে তা পোষ্ট হওয়ার প্রত্যাশা করে (যেমন জাজানো request.POSTপরিবর্তে ব্যবহার করা request.REQUEST), বা খ) NonFormValueসুরক্ষার কারণে বা ইউআরএল বারে বা ইতিহাসে প্রদর্শিত হবে না এমন কারণ because এটি একটি ক্ষণস্থায়ী মান।
লে ব্রেনেককি

6

প্রথমে আইটেমটি যুক্ত করুন এবং তারপরে ক্রমিক করুন:

$.ajax({
    type: 'POST',
    url: this.action,
    data: $.extend($(this), {'NonFormValue': NonFormValue}).serialize()
});

1
আমার পক্ষেও কাজ করেনি। যদিও এটি বস্তুটিকে প্রসারিত করে তবে প্রত্যাশার মতো কাজ করে না।
পাঙ্কস

5

আপনি সর্বদা করতে পারেন ভুলবেন না:

<input type="hidden" name="NonFormName" value="NonFormValue" />

আপনার আসল আকারে যা কেসের উপর নির্ভর করে আপনার কোডের জন্য ভাল।


2

আমরা যেমন করতে পারি:

data = $form.serialize() + "&foo=bar";

উদাহরণ স্বরূপ:

var userData = localStorage.getItem("userFormSerializeData");
var userId = localStorage.getItem("userId");

$.ajax({
    type: "POST",
    url: postUrl,
    data: $(form).serialize() + "&" + userData + "&userId=" + userId,
    dataType: 'json',
    success: function (response) {
        //do something
    }
});

0

ফর্ম ডেটা প্রক্রিয়াকরণের জন্য আপনি একটি অতিরিক্ত ফাংশন লিখতে পারেন এবং আপনার ফর্মের মূল্যবান ডেটা হিসাবে আপনার ননফর্ম ডেটা যুক্ত করা উচিত et উদাহরণটি:

<form method="POST" id="add-form">
    <div class="form-group required ">
        <label for="key">Enter key</label>
        <input type="text" name="key" id="key"  data-nonformdata="hai"/>
    </div>
    <div class="form-group required ">
        <label for="name">Ente Name</label>
        <input type="text" name="name" id="name"  data-nonformdata="hello"/>
    </div>
    <input type="submit" id="add-formdata-btn" value="submit">
</form>

তারপরে ফর্ম প্রসেসিংয়ের জন্য এই jquery যুক্ত করুন

<script>
$(document).onready(function(){
    $('#add-form').submit(function(event){
        event.preventDefault();
        var formData = $("form").serializeArray();
        formData = processFormData(formData);
        // write further code here---->
    });
});
processFormData(formData)
{
    var data = formData;
    data.forEach(function(object){
        $('#add-form input').each(function(){
            if(this.name == object.name){
                var nonformData = $(this).data("nonformdata");
                formData.push({name:this.name,value:nonformData});
            }
        });
    });
    return formData;
}


0

এটাই অধিকতর ভালো:

data: [$(this).serialize(),$.param({NonFormValue: NonFormValue})].join('&')

কেন এটি আরও ভাল পদ্ধতির তা দয়া করে আরও বিশদ বিবরণ যুক্ত করুন।
চিহ্নিত করুন

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