2016-06-17 18 views
6

Ho un problema con jQuery ajax. I javascriptjQuery ajax post Uncaught RangeError: Dimensione massima stack di chiamate superata

<script type="text/javascript"> 
    $(function() { 
     $('body').on("click", "#pager a", function(e) { 
      e.stopPropagation(); 
      e.preventDefault(); 
      var a = $(this); 
      var model = $('#searchForm').serialize(); 
      $.ajax({ 
       url: '/Product/Products', 
       type: 'POST', 
       data: { 
        model: model, page: a 
       }, 
       success: function (data) { 
        alert('success'); 
        $('#productsList').html(data); 
       } 
      }); 
     }); 
    }); 
</script> 

Questo codice di errore produrre "RangeError Uncaught: chiamata di massima dimensione dello stack superato" e non capisco perché. Non ho trigger, ho usato preventDefault e stopPropagation, ma ho ancora questo errore. Qualcuno può aiutarmi?

+0

È davvero strano. Non vedo alcun motivo per cui questo codice dovrebbe produrlo. Non hai _any_ altro codice da nessun'altra parte? –

+1

Puoi modificare la tua domanda e aggiungere il tuo HTML per favore? Per aiutarci a riprodurre l'errore. –

+0

Hai 'page: a' come parte dei dati che stai inviando, dove' a' è un oggetto jQuery - cosa ti aspetti che faccia? – nnnnnn

risposta

1

È necessario rimuovere lo var a = $(this);. Non so cosa cerchi di ottenere lì, ma usando un elemento cliccato con jQuery come dati di richiesta è un non senso.

+0

* "utilizzando il contesto dell'evento (rappresentato da questo) come un selettore jQuery" * - Ma "questo" è * non * l'evento, è un riferimento all'elemento a cui si è verificato l'evento. – nnnnnn

+0

Sì, sei vero, mio ​​male. Ma ancora cercando di inviare un elemento jQuery avvolto come dati di richiesta è strano. –

+0

È strano, garantito, ma probabilmente non è correlato all'errore di "stack massimo chiamate". –

6

Invece di utilizzare var a = $ (this) per ottenere la pagina, utilizzare un campo nascosto e assegnare il valore della pagina al campo.

<input type="hidden" value="xyzpage" id="pageValue"> 

var pageVal = $("#pageValue").val(); 

data: { 
     model: model, page:pageVal 
     }, 

Questo risolverà il problema immagino

9

Questo errore può anche venire se si passa qualcosa in dati che non è definito in tale ambito. Un'altra ragione è passare dati con val() direttamente.

+0

questo dovrebbe essere un commento –

+1

Grazie! Sto passando dati con .val() direttamente ma in una proprietà ho dimenticato add .val(), il tuo commento mi ha salvato un sacco di tempo! – Sousuke

+0

Grazie anche a te. Era un problema qui – DiChrist