jQuery - অবৈধ প্রার্থনা


107

jQuery v1.7.2

আমার এই ফানসিওনটি যা কার্যকর করার সময় আমাকে নিম্নলিখিত ত্রুটিটি দেয়:

Uncaught TypeError: Illegal invocation

ফাংশনটি এখানে:

$('form[name="twp-tool-distance-form"]').on('submit', function(e) {
    e.preventDefault();

    var from = $('form[name="twp-tool-distance-form"] input[name="from"]');
    var to = $('form[name="twp-tool-distance-form"] input[name="to"]');
    var unit = $('form[name="twp-tool-distance-form"] input[name="unit"]');
    var speed = game.unit.speed($(unit).val());

    if (!/^\d{3}\|\d{3}$/.test($(from).val()))
    {
        $(from).css('border-color', 'red');
        return false;
    }

    if (!/^\d{3}\|\d{3}$/.test($(to).val()))
    {
        $(to).css('border-color', 'red');
        return false;
    }

    var data = {
        from : from,
        to : to,
        speed : speed
    };

    $.ajax({
        url : base_url+'index.php',
        type: 'POST',
        dataType: 'json',
        data: data,
        cache : false
    }).done(function(response) {
        alert(response);
    });

    return false;
});

আমি যদি dataআজাক্স কল থেকে সরিয়ে ফেলি তবে এটি কার্যকর হয় .. কোনও পরামর্শ?

ধন্যবাদ!


fromডেটা থেকে সরানোর চেষ্টা করুন। হতে পারে এটি jquery এর সাথে বিরোধিতা করছে
gopi1410

6
আপনি বুঝতে পেরেছেন যে আপনার জিকুয়ের জিনিসগুলি ধাক্কা দেওয়ার চেষ্টা করেছেন, ঠিক জেএসএন নয়?
asawyer

18
আমি যখন কিছু jQuery অবজেক্টে
.val

উত্তর:


117

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

চেষ্টা করুন:

var data = {
    from : from.val(),
    to : to.val(),
    speed : speed
};

লাইনেও লক্ষ্য করুন:

$(from).css(...
$(to).css(

আপনার জিকুয়েরি র‍্যাপারের দরকার নেই যেমন টু এন্ড ফ্রি ইতিমধ্যে jQuery অবজেক্ট।


2
ধন্যবাদ, ভুলে গেছি আমি স্ট্রিংয়ের পরিবর্তে বস্তুগুলি লোড করেছি, সাধারণত আমি স্ট্রিং লোড করি :)
yoda

3
এই পদ্ধতির সাহায্য আমাকে। আমি আমার ভেরিয়েবলগুলির নাম রাখি কারণ $from = $('#from');এটি আমাকে মনে রাখতে সহায়তা করে যে এটি কোনও jQuery অবজেক্টকে উপস্থাপন করে যা কোনও স্ট্রিংয়ের কোনও পদ্ধতিতে কলিং এড়ানোর .toString()বা কোনও jQuery অবজেক্টের সাথে স্ট্রিংয়ের সাথে সামঞ্জস্য করার চেষ্টা করতে বা সহায়তা করে helps
টিম্বব্রাউন

আমার .val()অংশটি অনুপস্থিত ছিল, সুতরাং এটি মানটি পাস করছিল না।
শার্পসি

109

প্রসেসডেটা সেট করার চেষ্টা করুন : এজাক্স সেটিংসে মিথ্যা

$.ajax({
    url : base_url+'index.php',
    type: 'POST',
    dataType: 'json',
    data: data,
    cache : false,
    processData: false
}).done(function(response) {
    alert(response);
});

8
By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type "application/x-www-form-urlencoded". If you want to send a DOMDocument, or other non-processed data, set this option to false.
বিওটিজেআর

আপনি যোগ করার প্রয়োজন হতে পারে contentType: false। একটি ফাইল আপলোড করার সময় আমি করেছি। দেখুন stackoverflow.com/questions/21044798/...
khylo

18

কেবল রেকর্ডের জন্য আপনি যদি ডেটার মতো অঘোষিত ভেরিয়েবল ব্যবহার করার চেষ্টা করেন তবে এটিও ঘটতে পারে

var layout = {};
$.ajax({
  ...
  data: {
    layout: laoyut // notice misspelled variable name
  },
  ...
});

1
তার জন্য ধন্যবাদ!! এটিই ছিল যেখানে আমাকে অবরুদ্ধ করা হয়েছিল।
ম্যাট জেলেনাক

13

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

processData: false,
contentType: false

আপনি নিম্নলিখিত হিসাবে চেষ্টা করতে পারেন:

//Ajax Form Submission
$(document).on("click", ".afs", function (e) {
    e.preventDefault();
    e.stopPropagation();
    var thisBtn = $(this);
    var thisForm = thisBtn.closest("form");
    var formData = new FormData(thisForm[0]);
    //var formData = thisForm.serializeArray();

    $.ajax({
        type: "POST",
        url: "<?=base_url();?>assignment/createAssignment",
        data: formData,
        processData: false,
        contentType: false,
        success:function(data){
            if(data=='yes')
            {
                alert('Success! Record inserted successfully');
            }
            else if(data=='no')
            {
                alert('Error! Record not inserted successfully')
            }
            else
            {
                alert('Error! Try again');
            }
        }
    });
});

এই দুটি বিকল্প কি করে, আপনি ব্যাখ্যা করতে পারেন?
রহিম.নাগরি

2

আমার ক্ষেত্রে, আমি সবেমাত্র পরিবর্তন করেছি

দ্রষ্টব্য: এটি জ্যাঙ্গোর ক্ষেত্রে, তাই আমি যুক্ত করেছি csrftoken। আপনার ক্ষেত্রে, আপনার এটি প্রয়োজন হতে পারে না।

যুক্ত contentType: false,processData: false

মন্তব্য সমূহ "Content-Type": "application/json"

$.ajax({
    url: location.pathname, 
    type: "POST",
    crossDomain: true,
    dataType: "json",
    headers: {
        "X-CSRFToken": csrftoken,
        "Content-Type": "application/json"
    },
    data:formData,
    success: (response, textStatus, jQxhr) => {

    },
    error: (jQxhr, textStatus, errorThrown) => {

    }
})

প্রতি

$.ajax({
    url: location.pathname, 
    type: "POST",
    crossDomain: true,
    dataType: "json",
    contentType: false,
    processData: false,
    headers: {
        "X-CSRFToken": csrftoken
        // "Content-Type": "application/json",
    },
    data:formData,
    success: (response, textStatus, jQxhr) => {

    },
    error: (jQxhr, textStatus, errorThrown) => {

    }
})

এবং এটা কাজ করে.


2

আমার ক্ষেত্রে আমি সমস্ত ভেরিয়েবলগুলি সংজ্ঞায়িত করিনি যা আমি আজাক্সে ডেটাতে যাচ্ছি।

var page = 1;

$.ajax({
    url: 'your_url',
    type: "post",
    data: { 'page' : page, 'search_candidate' : search_candidate }
    success: function(result){
        alert('function called');
    }
)}

আমি সবেমাত্র ভেরিয়েবল var search_candidate = "candidate name";এবং এর কার্যকারিতা সংজ্ঞায়িত করেছি ।

var page = 1;
var search_candidate = "candidate name"; // defined
$.ajax({
    url: 'your_url',
    type: "post",
    data: { 'page' : page, 'search_candidate' : search_candidate }
    success: function(result){
        alert('function called');
    }
)}

0

আমার সমস্যা সম্পর্কিত ছিল না processData। কারণ আমি এমন একটি ফাংশন পাঠিয়েছিলাম যার সাথে পরে ডাকা যাবে না applyকারণ এতে পর্যাপ্ত যুক্তি নেই। বিশেষত আমার কলব্যাক alertহিসাবে ব্যবহার করা উচিত হয়নি error

$.ajax({
    url: csvApi,
    success: parseCsvs,
    dataType: "json",
    timeout: 5000,
    processData: false,
    error: alert
});

কেন যে সমস্যা হতে পারে সে সম্পর্কে আরও তথ্যের জন্য এই উত্তরটি দেখুন: নির্দিষ্ট ফাংশন কলগুলিকে কেন জাভাস্ক্রিপ্টে "অবৈধ আহ্বান" বলা হয়?

আমি যেভাবে এটি আবিষ্কার করতে পেরেছি সেটি হ'ল একটি console.log(list[ firingIndex ]) jQuery এ যাতে আমি এটি কী গুলি চালাচ্ছিলাম তা ট্র্যাক করতে পারি।

এটি স্থির ছিল:

function myError(jqx, textStatus, errStr) {
    alert(errStr);
}

$.ajax({
    url: csvApi,
    success: parseCsvs,
    dataType: "json",
    timeout: 5000,
    error: myError // Note that passing `alert` instead can cause a "jquery.js:3189 Uncaught TypeError: Illegal invocation" sometimes
});

0

আমার ক্ষেত্রে (ওয়েবপ্যাক 4 ব্যবহার করে) একটি বেনামি ফাংশনের মধ্যে, যা আমি কলব্যাক হিসাবে ব্যবহার করেছি।

আমি ব্যবহারের ছিল window.$.ajax()পরিবর্তে $.ajax()থাকা সত্বেও:

import $ from 'jquery';
window.$ = window.jQuery = $;

0

এছাড়াও এটিও একটি কারণ: আপনি যদি কোনও jQuery সংগ্রহ (.map () বা এর অনুরূপ কিছু দিয়ে) তৈরি করেন তবে আপনার এই সংগ্রহটি .jax () এর ডেটা ব্যবহার করবেন না। কারণ এটি এখনও একটি jQuery অবজেক্ট , সরল জাভাস্ক্রিপ্ট অ্যারে নয় । আপনার প্ল্যাটফর্ম জেএস অ্যারে পেতে।

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