জিক্যুরি: অ্যাজাক্স অনুরোধে 'আনকাচড টাইপ এয়ারার: ​​অবৈধ অনুরোধ' - বেশ কয়েকটি উপাদান


112

আমার দুটি নির্বাচন উপাদান রয়েছে, এ এবং বি: যখন এ এর ​​নির্বাচিত বিকল্প পরিবর্তিত হয়, বি এর বিকল্পগুলি অবশ্যই সেই অনুযায়ী আপডেট করা উচিত। এ-এর প্রতিটি উপাদান বি-তে অনেকগুলি উপাদান বোঝায়, এটি একের মধ্যে একাধিক সম্পর্ক (এ-তে জাতি রয়েছে, বিতে প্রদত্ত জাতিতে অবস্থিত শহরগুলি থাকতে হবে)।

ফাংশনটি do_ajaxঅ্যাসিক্রোনাস অনুরোধটি চালানো উচিত:

function do_ajax(elem, mydata, filename)
{
    $.ajax({
        url: filename,
        context: elem,
        data: mydata,
        datatype: "html",
        success: function (data, textStatus, xhr) {
            elem.innerHTML = data;
        }
    });
}

বি এর বিকল্পগুলি আপডেট করার জন্য আমি এ এর onChangeইভেন্টে একটি ফাংশন কল যুক্ত করেছি । অন-চেঞ্জ ইভেন্টটি (এর A) ট্রিগার করা হলে এখানে ফাংশনটি সঞ্চালিত হয়:

function my_onchange(e) // "e" is element "A"
{
    var sel_B = ... ; // get select element "B"

    // I skipped some code here
    // ...

    var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
    };
    do_ajax(city_sel, data, 'ajax_handler.php');
}

}

আমি জিকিউরি ডক্সে পড়েছি যা dataএকটি অ্যারে (কী মান জোড়া) হতে পারে। আমি যদি রাখি ত্রুটিটি পেয়েছি:

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
};

পরিবর্তে, আমার ডেটা যদি স্ট্রিং হয় তবে আমি সেই ত্রুটিটি পাই না:

var data = 'mode=filter_city&id_A=' + e[e.selectedIndex];

তবে আমার সার্ভার-সাইড পিএইচপি কোডে আমার চলকটির "অ্যারে সংস্করণ" দরকার need

Uncaught TypeError: Illegal invocation, "JQuery-1.7.2.min.js" ফাইল, যা সব সংকুচিত অবস্থিত তাই আমি চিন্তা করতে পারে কোডের অংশ কি ত্রুটি উত্থাপিত।

আমার কোডে আমি কী এমন কোনও সেটিং পরিবর্তন করতে পারি যাতে এটি ডেটাকে সহযোগী অ্যারে হিসাবে গ্রহণ করে?

উত্তর:


151

সরফরাজের সাথে আলাপের জন্য আমরা সমাধানটি বের করতে পারি।

সমস্যাটি হ'ল আমি তার মানটির পরিবর্তে একটি এইচটিএমএল উপাদানটি পাস করছিলাম, যা আসলে আমি যা করতে চেয়েছিলাম (আসলে আমার পিএইচপি কোডে আমার মানটি আমার citiesটেবিলটি অনুসন্ধানের জন্য বিদেশী কী হিসাবে প্রয়োজন এবং সঠিক এন্ট্রিগুলি ফিল্টার করা উচিত)।

সুতরাং, পরিবর্তে:

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
};

এটা করা উচিত:

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex].value
};

দ্রষ্টব্য: জেসন কুলাটুঙ্গার উত্তরটি পরীক্ষা করুন , এটি এইচএমএল উপাদানটি কেন পাস করায় সমস্যা সৃষ্টি করছে তা ব্যাখ্যা করার জন্য জ্যাকুয়ের ডককে উদ্ধৃত করেছে।


ঠিক আমি কি করছিলাম .Val () ব্যবহার করতে ভুলে গেছেন
উসমান শওকত

আমি একটি ভেরিয়েবলের মধ্যে একটি নির্বাচিত এইচটিএমএল উপাদানটির বিকল্পটি পাস করছিলাম। এটি লক্ষ্য করে নি যে এটি সরল পাঠ্য নয় বরং এইচটিএমএল।
স্টার্লিং ডিয়াজ

46

এর জন্য jQuery ডক্স থেকে processData:

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

সূত্র: http://api.jquery.com/jquery.ajax

দেখে মনে হচ্ছে processDataআপনার সার্ভারে আপনার ডেটা প্রেরণ করতে বা আপনার পিএইচপি স্ক্রিপ্টটি সংশোধন করে এনকোডড প্যারামিটারগুলি অনুসন্ধানের জন্য ব্যবহার করতে হবে।


1
এটা সত্য. যদি আমি এটি দেখতে পেতাম তবে এটি আমার কোডের আসল ত্রুটির দিকে ইঙ্গিত করত। ধন্যবাদ, আমি আমার উত্তরে একটি নোট যুক্ত করব।
নাদির সাম্পাওলি

25

ফর্মডাটা অবজেক্ট পোস্ট করার সময় আমি এই ত্রুটিটি পেয়েছিলাম কারণ আমি আজাক্স কলটি সঠিকভাবে সেট আপ করছিলাম না। নীচে সেটআপ আমার সমস্যা স্থির।

var myformData = new FormData();        
myformData.append('leadid', $("#leadid").val());
myformData.append('date', $(this).val());
myformData.append('time', $(e.target).prev().val());

$.ajax({
    method: 'post',
    processData: false,
    contentType: false,
    cache: false,
    data: myformData,
    enctype: 'multipart/form-data',
    url: 'include/ajax.php',
    success: function (response) {
        $("#subform").html(response).delay(4000).hide(1); 
    }
});

ধন্যবাদ মানুষ. আপনি আমার দিনটি বাঁচিয়েছেন এবং আমার সমস্যাটি আমার এজ্যাক্স বডিটিতে "প্রসেসডেটা: মিথ্যা, সামগ্রী টাইপ: মিথ্যা, ক্যাশে: মিথ্যা" যুক্ত করে সমাধান করা হয়েছে। অনেক ধন্যবাদ.
কুমাটেকিন

11

আমি JQuery ডক্সে পড়েছি যে ডেটা একটি অ্যারে (কী মান জোড়া) হতে পারে। আমি যদি রাখি ত্রুটিটি পেয়েছি:

এটি বস্তুটি অ্যারে নয়:

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
};

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

var data = [{
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
}];

1
এটি ত্রুটিটিকে আর ছুঁড়ে না ফেলে তবে মনে হয় যে এই ডেটাটি আমার $_GETঅ্যারে সার্ভার-সাইডে ( var_export($_GET)আউটপুটগুলি array ( 'undefined' => 'undefined', )) দেওয়া হচ্ছে না
নাদির সাম্পাওলি

@ নাদির: আপনার $.ajaxহ্যান্ডলারে পদ্ধতির ধরণটি সংজ্ঞায়িত করার চেষ্টা করুন :type:'get',
সরফরাজ

@ সরফরাজ @ ফলাফল একই। সার্ভার-সাইড, dataকীগুলি GET অ্যারেতে পাওয়া উচিত, তাই না? অথবা সম্ভবত তাদের অন্য অনুরোধ পদ্ধতির মাধ্যমে প্রেরণ করা হয়েছে?
নাদির সাম্পাওলি

@ নাদির: এটির মতো কিছু কাজ করে data: {foo:'myfoo', bar:'mybar'}, আমার মনে হয় আরও কিছু সমস্যা হতে পারে।
সরফরাজ

@ সরফরাজ আমি একজন বোকা, আমি একটি এইচটিএমএল অবজেক্ট পাঠাচ্ছিলাম e[e.selectedIndex]যখন আমার মানটি পাস করা উচিত ছিল e[e.selectedIndex].value। এই ত্রুটিটি ঠিক করার পরে, অবজেক্ট নোটেশনটি ঠিক কাজ করে।
নাদির সাম্পাওলি

7

সম্প্রতি একই সমস্যা ছিল, যোগ করে সমাধান করা traditional: true,


এটি আসলে কাজ করে, আমি কেবল আধুনিক ব্রাউজারগুলির জন্যই ধরে নিচ্ছি
barnacle.m

0
function do_ajax(elem, mydata, filename)
{
    $.ajax({
        url: filename,
        context: elem,
        data: mydata,
        **contentType: false,
        processData: false**
        datatype: "html",
        success: function (data, textStatus, xhr) {
            elem.innerHTML = data;
        }
    });
}

4
একটি ভাল উত্তর কেবল একটি কোড স্নিপেটের চেয়ে বেশি। এটি ব্যাখ্যা করতে হবে কেন এটি প্রাথমিক প্রশ্নের উত্তর দেয় এবং যদি উপলভ্য হয় তবে সম্পর্কিত ডকুমেন্টেশনের লিঙ্ক সরবরাহ করে।
জেএসটিএল

দুটি ক্ষেত্র ছাড়া contentTypeএবং processData, ত্রুটি দেখানো চালু রাখতে হবে। আমি দুটি ক্ষেত্র যুক্ত করেছি এবং এটি আমার পক্ষে কাজ করেছে। আমার ধারণা ওপ দুটি গুরুত্বপূর্ণ ক্ষেত্রটি নির্দেশ করার চেষ্টা করছিল।
একুন্দায়ো আশীর্বাদ ফানমিনিয়ি

-1
$.ajax({
                    url:"",
                    type: "POST",
                    data: new FormData($('#uploadDatabaseForm')[0]),
                    contentType:false,
                    cache: false,
                    processData:false,
                    success:function (msg) {}
                  });

7
যদি আপনি কোনও ব্যাখ্যা অন্তর্ভুক্ত করেন তবে উত্তরগুলি আরও সহায়ক।
জন বি

-2

এটা চেষ্টা কর:

            $.ajax({
                    url:"",
                    type: "POST",
                    data: new FormData($('#uploadDatabaseForm')[0]),
                    contentType:false,
                    cache: false,
                    processData:false,
                    success:function (msg) {}
                  });
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.