Archivos de Categoría: Javascript - Paginas 5

Añadir campos al enviar por Ajax de Jquery

Hoy me ha ocurrido que tenía que mandar un formulario por Ajax pero tenía que añadir una serie de campos a la hora de enviarlo. Hay varias soluciones:

  • Construir un Json con los nuevos valores y posteriormente recorrer  el formulario para ir añadiendo todos los campos.
  • Añadir los valores nuevos como input hidden dentro del formulario y luego simplemente hacer un serialize del formulario
  • Construir un Json con los campos del formulario y unirlos a los nuevos valores a enviar, para posteriormente enviar el nuevo Json. Pongo como hacer este último caso:

Lo primero es usar un plugin de jquery que vi en http://stackoverflow.com que te permite construir un Json a partir de un formulario (distinto al serialize() que lo que devuelve es una cadena con los campos del formulario)

$.fn.serializeObject = function(){
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};

Ahora solo hay que extender el Json resultante con los nuevos valores que ya tenia en otro Json

$.ajax({
url     :   ‘action.html’,
method  :   'post',
data    :   $.extend({}, $('#formulario').serializeObject(), JsonNuevosValores)
}).done(function( data ) {
/* lo que tenga que hacer con el resultado*/
});

Política de cookies con un simple javascript

Según la normativa en España, si se usan cookies en una web hay que poner el típico aviso legal si no quieres que te metan un paquete. Para poder implementarlo en los proyectos en plan rápido me he montado un js externo que muestra la capita con el aviso y la posibilidad de aceptar o ver el texto legal completo. Lo que hace es comprobar si existe una cookie de javascript para mostrarla o no. El código del js sería el siguiente:

$(function(){
	if(Cookies.get("politicaCookies").length === 0){
		Cookies.show();		
	}
});

var Cookies = {
	set:function(name, value, days){
		if (days) {
			var date = new Date();
			date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
			var expires = "; expires=" + date.toGMTString();
		}
		else var expires = "";
		document.cookie = name + "=" + value + expires + "; path=/";
	},
	get:function(c_name){
		if (document.cookie.length > 0) {
			c_start = document.cookie.indexOf(c_name + "=");
			if (c_start != -1) {
				c_start = c_start + c_name.length + 1;
				c_end = document.cookie.indexOf(";", c_start);
				if (c_end == -1) {
					c_end = document.cookie.length;
				}
				return unescape(document.cookie.substring(c_start, c_end));
			}
		}
		return "";
	},
	show:function(){
		capa = '<div id="politicaCookies" style="-webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; border: 3px solid #057905; bottom: 25px; height: 200px; position: fixed; right: 25px; width: 500px; z-index: 99999999; background-color:#fff; padding:10px;"> \
<h3 style="color:#057905; border-bottom:2px solid #057905;padding-bottom:5px;">Información sobre Cookies en ertomy.es</h3> \
<p style="padding-top:5px; width: 489px; height:125px;" class="txt_destacado"> \
Con el fin de ofrecerle una experiencia de navegación adaptada a sus necesidades, y optimizar el rendimiento de ertomy.es, le informamos de que esta web utiliza cookies. Ertomy hace un uso completamente responsable y nada intrusivo de las cookies, y dado que nos preocupa su privacidad, queremos informarle sobre el uso que hacemos de ellas y las opciones que tiene a su disposición como usuario para gestionarlas. \
</p> \
<a style="text-decoration: none;" title="Continuar navegando" href="#" onclick="Cookies.aceptar();">Continuar navegando</a> \
<a style="text-decoration: none;" title="Ver política de cookies" href="legal.html">Ver política de cookies</a> \
</div>';
		$('body').append(capa);
	},
	aceptar:function(){
		Cookies.set('politicaCookies', true, 100);	
		$('#politicaCookies').remove();
	}
};

Jugando con la API de Google maps

Hoy me ha tocado montar un administrador de áreas de actuación de una empresa para lo que tenemos una serie de geolocalizaciones y rango de kilómetros de influencia. Como el cliente no se sabe la longitud y latitud de las zonas, primero ha tocado gracias a la API de Google maps el calcular esas coordenadas.

var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({
		address : ' La dirección a buscar, España', 
		region: 'no' 
	 },
	 function(results, status) {
		 if (status.toLowerCase() == 'ok') {                            
			var _latitud = results[0]['geometry']['location'].lat();
			var _longitud = results[0]['geometry']['location'].lng();
		 }else{
			alert('La dirección especificada no se ha podido encontrar');                                             
		 }
	 }
 );

Y me he montado un objeto de JavaScript para dibujar un mapa de Google maps y permitir dibujar o eliminar círculos sobre él.

var obj_mapa = {
	mapa:null,
	circulos:[],
	init:function(){
		var mapOptions = {
			zoom: 5,
			center: new google.maps.LatLng(39, -4)
		};
		// cargamos el mapa en la capa #mapazonas
		this.mapa = new google.maps.Map(document.getElementById('mapazonas'), mapOptions);
		
		/* en caso de tener que cargar círculos desde el principio */ 
		var _self = this;
		$('input[name="longitud[]"]').each(function(index){
			var _long = $(this).val();
			var _lat = $('input[name="latitud[]"]:eq('+index+')').val();
			var _km = $('input[name="km_accion[]"]:eq('+index+')').val();
			_self.add(_lat, _long, _km);
		});
	}, 
	add:function(latitud, longitud, km){
		var populationOptions = {
			strokeColor: '#12805b',
			strokeOpacity: 0.8,
			strokeWeight: 1,
			fillColor: '#12805b',
			fillOpacity: 0.35,
			map: this.mapa,
			center: new google.maps.LatLng(latitud, longitud),
			radius: km * 1000
	  };    
	  this.circulos.push(new google.maps.Circle(populationOptions));
	},
	del:function(index){
		this.circulos[index+1].setMap(null);
		this.circulos.splice(index+1, 1);
	}
};

Y para interactuar con la clase:

// para iniciar el mapa
obj_mapa.init()

// para añadir un nuevo circulo (se guardará dentro del array obj_mapa.circulos)
obj_mapa.add(_latitud, _longitud, _kilometros_de_radio);

// y por ultimo para borrarlo (el parmámetro _index sería la posición del mapa en el array obj_mapa.circulos)
obj_del(_index)

Y por supuesto, incluir la API de google porque si no complicado esta que funcione…..

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>