Foros del Web » Programando para Internet » Javascript »

GOOGLE MAPS API fallo Callback

Estas en el tema de GOOGLE MAPS API fallo Callback en el foro de Javascript en Foros del Web. Hola. Tengo un problema con un Google Map que ha dejado de funcionar porque falta el callback en javascript. En buscar la solución siempre encuentro ...
  #1 (permalink)  
Antiguo 09/09/2023, 05:34
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 19 años
Puntos: 8
GOOGLE MAPS API fallo Callback

Hola.

Tengo un problema con un Google Map que ha dejado de funcionar porque falta el callback en javascript.

En buscar la solución siempre encuentro la misma, que se describe aquí:

https://stackoverflow.com/questions/...ck-is-not-supp

Se trataría de añadir, por ejemplo,
Código:
&callback=Function.prototype
No obstante, mi código está generado en un php así:

Código:
$url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' . $address . '&key=' . $this->getServerApiKey();
Y por alguna razón no me resulta la inserción al final de la línea de ninguna forma. En ocasiones no produce ningún efecto y en otros un error de página.

He intentado, por ejemplo, así:

Código:
$url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' . $address . '&key=' . $this->getServerApiKey() . '&callback=Function.prototype';
Lo cierto es que no soy programador y estoy perdido con este tema que parece que afecta a multitud de sitios desde que la norma se exige de forma obligatoria.

¿Me podéis hacer alguna indicación?

Gracias.
  #2 (permalink)  
Antiguo 12/09/2023, 01:28
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 568
Antigüedad: 19 años
Puntos: 25
Respuesta: GOOGLE MAPS API fallo Callback

La llamada a la api la estás haciendo con PHP y no con javascript, por lo que Function.prototype no existe.

Deberías usar el SDK de Google para PHP para esto.

Si en defecto estás usando javascript y solo armando la URL con PHP podrías declarar un callback vos mismo en el script

<script>

// ... tu codigo de google

function fakeCallback() {}
</script>

y en la URL: $url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' . $address . '&key=' . $this->getServerApiKey() . '&callback=fakeCallback';
__________________
www.marcher.com.uy - Web personal
Nerd's Corner - Desarrollo de software a medida
  #3 (permalink)  
Antiguo 16/09/2023, 13:29
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 19 años
Puntos: 8
Respuesta: GOOGLE MAPS API fallo Callback

Hola vb2005, y gracias por responder porque creo que esto lo tendría que haber puesto en el foro de PHP.

El tema es que se trata de un Joomla! con una extensión que incorpora la llamada a la API, que la incluye, parece ser con este php:

Código:
<?php

defined('_JEXEC') or die;

class SiteGoogleMaps
{
    protected $jsApiKey;
    protected $serverApiKey;

    public function __construct($jsApiKey, $serverApiKey)
    {
        $this->jsApiKey = $jsApiKey;
        $this->serverApiKey = $serverApiKey;
    }

    public static function getInstance($jsApiKey, $serverApiKey)
    {
        static $instance = null;

        if (is_null($instance)) {
            $instance = new self($jsApiKey, $serverApiKey);
        }

        return $instance;
    }

    public function getJsApiKey()
    {
        return $this->jsApiKey;
    }

    public function getServerApiKey()
    {
        return $this->serverApiKey;
    }

    public function geoCode($address)
    {
        jimport('joomla.filesyste.file');

        $address = urlencode($address);
        $url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' . $address . '&key=' . $this->getServerApiKey();
        $data = json_decode($this->getUrl($url));

        \Joomla\CMS\Log\Log::add(
            sprintf('Decoding address "%s", using api key "%s" and geocoding url: "%s"', urldecode($address), $this->getServerApiKey(), $url),
            \Joomla\CMS\Log\Log::INFO,
            'com_site.google_maps.geocoding'
        );

        if ('OK' != $data->status || !isset($data->results[0]->geometry->location)) {
            \Joomla\CMS\Log\Log::add(
                sprintf('Decoding address "%s" failed with error "%s"', urldecode($address), $data->error_message),
                \Joomla\CMS\Log\Log::ERROR,
                'com_site.google_maps.geocoding'
            );

            return false;
        }

        $location = $data->results[0]->geometry->location;

        \Joomla\CMS\Log\Log::add(
            sprintf('Decoded address "%s" to latitude "%s" and longitude "%s"', urldecode($address), $location->lat, $location->lng),
            \Joomla\CMS\Log\Log::NOTICE,
            'com_site.google_maps.geocoding'
        );

        return $location;
    }

    public function renderMap($id = 'site-googlemap', $location = array(), $height = '400', $width = '100%', $config = array())
    {
        // Render Javascript.
        FactoryHtml::script('googlemaps');
        JHtml::script('https://maps.googleapis.com/maps/api/js?key=' . $this->getJsApiKey());

        JText::script('JPREVIOUS');
        JText::script('JNEXT');

        // Set default values for location.
        if (!is_array($location)) {
            $location = array();
        }

        if (!isset($location['lat']) || !isset($location['lng'])) {
            $location['lat'] = 48;
            $location['lng'] = 14;
        }

        if (!isset($location['zoom'])) {
            $location['zoom'] = 3;
        }

        // Set default values for dimension.
        if (false === strpos($height, '%')) {
            $height .= 'px';
        }

        if (false === strpos($width, '%')) {
            $width .= 'px';
        }

        $optionUseSimpleMarker = isset($config['useSimpleMarkers']) ? $config['useSimpleMarkers'] : 'false';
        $options = '{ center: new google.maps.LatLng(' . $location['lat'] . ', ' . $location['lng'] . '), zoom: ' . $location['zoom'] . ', useSimpleMarkers: ' . $optionUseSimpleMarker . ' }';

        if ($optionUseSimpleMarker) {
            JHtml::script('components/com_site/assets/js/oms.min.js');
        }

        $document = JFactory::getDocument();
        $initJs = '$("#' . $id . '").siteGoogleMap(' . $options . ') ';
        $js = array();

        $js[] = 'jQuery(document).ready(function ($) { ';

        if (isset($config['initOnTabOpen'])) {
            $tab = $config['initOnTabOpen'];
            $js[] = 'var tab = $(".nav li a[href=\"#' . $tab . '\"]");';
            $js[] = 'if (tab.parent().hasClass("active")) {';
            $js[] = $initJs;
            $js[] = '}';
            $js[] = 'else {';
            $js[] = '  $(".nav li a[href=\"#' . $tab . '\"]").click(function (event) { ';
            $js[] = $initJs;
            $js[] = '  });';
            $js[] = '}';
        } else {
            $js[] = $initJs;
        }

        $js[] = ' });';

        $document->addScriptDeclaration(implode("\n", $js));

        $html = array();

        $html[] = '<div id="' . $id . '" style="height: ' . $height . '; width: ' . $width . ';" class="site-google-map"></div>';

        return implode("\n", $html);
    }

    public function renderJavascript()
    {
        FactoryHtml::script('googlemaps');
        JHtml::script('https://maps.googleapis.com/maps/api/js?key=' . $this->getJsApiKey());
    }

    protected function getUrl($url)
    {
        if (function_exists('curl_init')) {
            $ch = curl_init();

            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

            $output = curl_exec($ch);

            if (!curl_errno($ch)) {
                curl_close($ch);
                return $output;
            }

            curl_close($ch);
        }

        return file_get_contents($url);
    }
}
No sé si con modificar este archivo es suficiente o me voy a tener que meter en una reconstrucción completa de la extensión para poder actualizar.

Se trata del problema que surgió al hacerse obligatorio el callback para cargar la API. Podéis verlo aquí:

https://stackoverflow.com/questions/...ck-is-not-supp

Por supuesto, el desarrollador de la extensión desapareció sin dejar ni rastro y no hay forma de pedir soporte.

Etiquetas: api, callback, fallo, google, maps
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:45.