jQuery – Invocazione illegale

jQuery v1.7.2

Ho questa funzione che mi sta dando il seguente errore durante l’esecuzione:

Uncaught TypeError: Illegal invocation 

Ecco la funzione:

 $('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; }); 

Se rimuovo data da una chiamata Ajax, funziona … qualche suggerimento?

Grazie!

Penso che sia necessario avere stringhe come valori dei dati. È probabile che qualcosa internamente in jQuery non codifichi / serializzi correttamente gli oggetti To & From.

provare:

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

Notare anche sulle linee

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

non hai bisogno del wrapper jQuery come da e verso sono già oggetti jQuery.

Prova ad impostare processData: false in impostazioni Ajax come questa

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

Solo per la cronaca può accadere anche se si tenta di utilizzare la variabile non dichiarata in dati come

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

Il mio problema non era correlato a processData . Era perché ho inviato una funzione che non può essere chiamata più tardi con apply perché non aveva argomenti sufficienti. Nello specifico non avrei dovuto usare alert come callback degli error .

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

Vedere questa risposta per ulteriori informazioni sul motivo per cui questo può essere un problema: perché determinate chiamate di funzione sono denominate “invocazioni illegali” in JavaScript?

Il modo in cui sono riuscito a scoprire questo è stato aggiungendo un console.log(list[ firingIndex ]) a jQuery in modo da poter tenere traccia di ciò che stava sparando.

Questa era la soluzione:

 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 });