Frage

Hey everyone, ich bin auf einem Widget für Apple Dashboard arbeiten, und ich habe auf ein Problem stoßen bei dem Versuch, Daten von meinem Server zu erhalten jQuerys Ajax-Funktion. Hier ist mein Javascript-Code:

$.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)
})

Und der Server antwortet mit diesem json:

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

Aus irgendeinem Grund aber, wenn ich laufe dies die Felder auf das Widget nicht ändern. Von Debugging, habe ich gelernt, dass das Widget nicht einmal die Anfrage an den Server macht, so macht es mir denken, dass Apple eine Art externe URL Block an Ort und Stelle hat. Ich weiß, das aber nicht wahr sein kann, weil viele Widgets nach Hause telefoniert nach Updates zu suchen.

Hat jemand irgendwelche Ideen, was falsch sein könnte?

EDIT:. Auch dieser Code funktioniert völlig in Ordnung in Safari


Wie von Luca angefordert, hier ist die PHP und Javascript-Code, der gerade läuft:

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)
})
}
War es hilfreich?

Lösung

In Dashcode auf Widget-Attribute und Allow Network Access stellen Sie sicher, dass Option aktiviert ist. Ich habe gebaut etwas, das einfach zu arbeiten, verweigert, und das war die Lösung.

Andere Tipps

Cross-Domain Ajax-Requests (Verwendung des XMLHttpRequest / ActiveX-Objekts) nicht in dem aktuellen Standard erlaubt, gemäß dem W3C-Spezifikation :

  

Diese Spezifikation umfasst nicht   die folgenden Merkmale auf, die sein, sind   als für eine zukünftige Version von   diese Spezifikation:

     
      
  • Cross-Site XMLHttpRequest;
  •   

Allerdings gibt es 1 Technik zu tun, Ajax fordert Cross-Domain JSONP , einen Skript-Tag auf der Seite, und mit einer kleinen Serverkonfiguration einschließlich.

jQuery unterstützt diese , sondern mit diesem auf Ihrem Server reagiert

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

Sie werden mit dieser reagieren soll:

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

MyCallback muss der Wert in den "Callback" Parameter, die Sie in der $ .getJSON () Funktion übergeben. Also, wenn ich PHP wurde mit dieser funktionieren würde:

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

hat Apple eine Art externer URL Block an seinem Platz.

In Ihrem Info.plist müssen Sie den Schlüssel AllowNetworkAccess auf true gesetzt haben.

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

Ihr Code funktioniert in Safari, weil es nicht im Armaturenbrett Sever beschränkt ist, und es ist Standards nicht complient, dass es Cross-Site-AJAX erlaubt. FF IS-Standards complient, dass es Ajax Cross-Site nicht gestattet.

Wenn Sie einen Dashboard-Widget erstellen, warum Sie nicht die XMLHttpRequest-Setup-Funktion in der Codebibliothek von Dashcode verwenden. Apple gebaut diese in so brauchen Sie nicht zu 3rd-Party-JS-Bibliotheken zu installieren. Ich bin nicht sicher über JSON-Unterstützung, aber vielleicht hier beginnen werden Sie in eine bessere Richtung führen.

Interessant, dass es in Safari funktioniert. Soweit ich weiß, x-Domain Ajax-Anfragen zu tun, müssen Sie den JSONP Datentyp verwenden.

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

http://bob.pythonmac.org/ Archiv / 2005/12/05 / Remote-json-JSONP /

Im Grunde müssen Sie callback=? auf Ihre Abfrage-String und jquery hinzufügen wird es automatisch mit der richtigen Methode zB ersetzen:

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

EDIT: setzen Sie den callback=? Bit am Ende der Abfrage-String nur um sicher zu sein

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top