[Javascript] Dashboard Cross-Domain-AJAX mit jQuery



Answers

Domainübergreifende Ajax-Anfragen (mit dem XMLHttpRequest / ActiveX-Objekt) sind im aktuellen Standard gemäß W3C-Spezifikation nicht erlaubt:

Diese Spezifikation enthält nicht die folgenden Funktionen, die für eine zukünftige Version dieser Spezifikation in Betracht gezogen werden:

  • Cross-Site XMLHttpRequest;

Allerdings gibt es eine Technik, dedizierte Ajax- Anfragen domainübergreifend , JSONP , auszuführen , indem ein Skript-Tag auf der Seite und mit einer kleinen Serverkonfiguration eingefügt wird.

jQuery unterstützt dies , aber anstatt auf Ihrem Server damit zu antworten

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

Sie werden damit antworten wollen:

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

myCallback muss der Wert in dem Parameter "Rückruf" sein, den Sie in der Funktion $ .getJSON () übergeben haben. Wenn ich also PHP benutze, würde das funktionieren:

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

Hey alle zusammen, ich arbeite an einem Widget für Apples Dashboard und ich habe ein Problem beim Versuch, Daten von meinem Server mit Hilfe von Jquery Ajax-Funktion zu bekommen. 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 ändern sich die Felder auf dem Widget jedoch nicht, wenn ich das ausführe. Aus dem Debugging habe ich gelernt, dass das Widget nicht einmal die Anfrage an den Server stellt, daher denke ich, dass Apple eine Art externen URL-Block installiert hat. Ich weiß, dass dies jedoch nicht wahr sein kann, weil viele Widgets nach Hause telefonieren, um nach Updates zu suchen.

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

EDIT: Auch dieser Code funktioniert einwandfrei in Safari.

Wie von Luca gewünscht, hier ist der 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)
})
}



Wenn Sie ein Dashboard-Widget erstellen, verwenden Sie die Funktion XMLHttpRequest Setup in der Codebibliothek von DashCode. Apple hat diese integriert, sodass Sie keine JS-Bibliotheken von Drittanbietern installieren müssen. Ich bin mir nicht sicher über JSON-Unterstützung, aber vielleicht starten Sie hier in eine bessere Richtung.




Links