Tablero de la Cruz-dominio de AJAX con jquery

Hola a todos, estoy trabajando en un widget para el Dashboard de Apple y me he encontrado con un problema al intentar obtener datos de mi servidor usando jquery ajax de función. Aquí está mi código javascript:

$.getJSON("http://example.com/getData.php?act=data",function(json) { 
    $("#devMessage").html(json.message)
    if(json.version != version) {
        $("#latestVersion").css("color","red")
    }
    $("#latestVersion").html(json.version)
})

Y el servidor responde con este json:

{"message":"Hello World","version":"1.0"}

Por alguna razón, sin embargo, cuando ejecuto este de los campos en el widget no cambian. A partir de la depuración, he aprendido que el widget no hacer la petición al servidor, por lo que me hace pensar que Apple tiene algún tipo de dirección URL externa del bloque en su lugar. Sé que esto no puede ser cierto, aunque, debido a que muchos de los widgets de teléfono de la casa para comprobar si hay actualizaciones.

¿Alguien tiene alguna idea sobre lo que podría estar equivocado?

EDIT: Además, este código funciona perfectamente bien en Safari.


Según lo solicitado por Luca, aquí está el PHP y el código Javascript que se ejecuta en la actualidad:

PHP:

echo $_GET["callback"].'({"message":"Hello World","version":"1.0"});';

Javascript:

function showBack(event)
{
var front = document.getElementById("front");
var back = document.getElementById("back");

if (window.widget) {
    widget.prepareForTransition("ToBack");
}

front.style.display = "none";
back.style.display = "block";
stopTime();
if (window.widget) {
    setTimeout('widget.performTransition();', 0);
}
$.getJSON('http://nakedsteve.com/data/the-button.php?callback=?',function(json) { 
    $("#devMessage").html(json.message)
    if(json.version != version) {
        $("#latestVersion").css("color","red")
    }
    $("#latestVersion").html(json.version)
})
}

OriginalEl autor Steve Gattuso | 2009-02-20

5 respuestas

  1. 7

    En Dashcode haga clic en Widget de Atributos luego Permitir el Acceso a la Red asegúrese de que la opción está activada. He construido algo que simplemente se negaron a trabajar, y esta fue la solución.

    Un poco tarde de la respuesta, pero el que lo hizo!

    OriginalEl autor Tom

  2. 4

    Cross-domain peticiones Ajax ( Usando XMLHttpRequest /objeto ActiveX ) no están permitidos en la norma actual, como por la Especificación del W3C:

    Esta especificación no incluye
    las siguientes características que están siendo
    considerado para una versión futura de
    esta especificación:

    • De Cross-site XMLHttpRequest;

    Sin embargo, hay 1 técnica de hacer ajax peticiones cross-domain, JSONP, mediante la inclusión de una etiqueta de secuencia de comandos en la página, y con un poco de configuración del servidor.

    jQuery soporta este, pero en lugar de responder en su servidor con este

    {"message":"Hello World","version":"1.0"}

    usted querrá responder con esto:

    myCallback({"message":"Hello World","version":"1.0"});

    myCallback debe ser el valor de la “devolución de llamada” parámetro que pasa en el $.getJSON() función. Así que si yo estaba usando PHP, este trabajo:

    echo $_GET["callback"].'({"message":"Hello World","version":"1.0"});';
    He intentado añadir ?callback=? al final de la url, y yo que la exacta código PHP en el servidor y todavía nada.
    Podemos ver el código Javascript y el código PHP? También es la consola de Javascript salida de errores?
    Hay que ir, y no, dashcode no informar sobre cualquier cosa en la runlog.
    Un widget de Dashboard es esencialmente una página web para realizar una solicitud a un servidor en algún lugar. No hay cruces de dominio, incluso si el OQ (original interrogador) lo pone en la pregunta.

    OriginalEl autor Luca Matteis

  3. 4

    Apple tiene algún tipo de dirección URL externa del bloque en su lugar.

    En su Información.plist que usted necesita para tener la llave AllowNetworkAccess establece en true.

    <key>allowNetworkAccess</key>
    <true/>

    El código funciona en Safari porque no está limitado en el tablero de instrumentos sever y no es la de los estándares de complient en que permite cruzar el AJAX. FF ES el nivel complient en que NO permite cross site ajax.

    OriginalEl autor Hyposaurus

  4. 0

    Si va a crear un widget de dashboard, ¿por qué no utilizar el XMLHttpRequest función de Configuración en el código de la biblioteca de DashCode. Apple construyó estas en así que usted no necesita instalar la 3ª parte de librerías JS. No estoy seguro acerca de la compatibilidad de JSON, pero tal vez a partir de aquí le llevará en una dirección mejor.

    Porque jQuery, ajax funciones de uso 1 línea de código, así se ve mejor.

    OriginalEl autor Paulo

  5. -2

    Muy interesante, que funciona en Safari. Por lo que yo sé hacer x-solicitudes ajax de dominio que usted necesita para utilizar el jsonp tipo de datos.

    http://docs.jquery.com/Ajax/jQuery.getJSON

    http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/

    Básicamente, usted necesita agregar callback=? a la cadena de consulta y jquery reemplazará automáticamente con el método correcto, por ejemplo:

    $.getJSON("http://example.com/getData.php?act=data&callback=?",function(){ ... });

    EDIT: poner el callback=? poco al final de la cadena de consulta sólo para estar seguro.

    OriginalEl autor roborourke

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *