Obtenga los parámetros de URL del enlace de texto y publíquelos en la llamada AJAX

Actualmente estoy trabajando en un poco de jQuery que permitirá a los usuarios realizar una llamada AJAX desde un enlace de texto. Esto no es un problema, pero el enlace de texto tiene parámetros que necesito enviar a la solicitud AJAX para que se ejecute correctamente.

Mi enlace de texto se parece a esto:

<a href="?affiliate=one&voteType=two">Click here</a>

Aquí está mi jQuery:

function getUrlParam(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}


/* Let's create a function that will allow us to vote on the hosts */

function hostVote() {

/* These variables are used to determine the button clicked */

    var affiliate = getUrlParam('affiliate');
    var voteType = getUrlParam('voteType');

    $.ajax({
      cache: false,
      type: "POST",
        url: "/php/hostvote.php",
        data: "affilate=" + affiliate + "&voteType=" + voteType +"",
        success: voteSubmitted
    });

    function voteSubmitted() {
        alert('Thanks for voting');
        $(this).addClass('yes');
    }
    return false;   
};

$("a.vote").click(hostVote);

El problema con este código es que no puedo enviar el enlace para poner ningún parámetro en la URL antes de que se ejecute la función, lo que da como resultado que las variables de afiliados y votaciones estén vacías.

¿Alguien puede ayudarme?

preguntado el 08 de noviembre de 11 a las 16:11

¿Por qué no extrae sus parámetros directamente del enlace de texto? -

2 Respuestas

Un mejor enfoque sería almacenar los datos que necesita en el data-* atributo del enlace. Esto facilitaría mucho la recuperación de los datos correspondientes. Aquí hay un ejemplo simple de cómo funcionaría.

<a href="#" data-affiliate="one" data-voteType="two">Click here</a>

$("a.vote").click(function(e){ 
    var affiliate = $(this).data('affiliate');
    var voteType =  $(this).data('voteType');
    // do your ajax call here 
    e.preventDefault(); 
}); 

respondido 08 nov., 11:20

En vez de -

var results = regex.exec( window.location.href );

podrías hacer -

var results = regex.exec($("a.vote").attr('href'));

y analizar las variables directamente desde su enlace?

respondido 08 nov., 11:20

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.