Dashboard Cross-domain-AJAX mit jquery
Hey an alle, ich arbeite an einem widget für apples Dashboard und ich habe ein problem beim Versuch, Daten von meinem server mit Hilfe von jquery ' s 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 dieser json:
{"message":"Hello World","version":"1.0"}
Aus irgendeinem Grund obwohl, wenn ich diesen starte, werden die Felder auf dem widget nicht ändern. Aus Debuggen, habe ich gelernt, dass das widget gar nicht machen die Anfrage an den server, so macht es mir denken, dass Apple hat eine Art von externen URL-sperren in Platz. Ich weiß, das kann nicht wahr sein, obwohl, weil viele widgets Handy zu Hause um nach updates zu suchen.
Hat jemand irgendwelche Ideen, was falsch sein könnte?
EDIT: Auch dieser code funktioniert einwandfrei in Safari.
Auf Anfrage von Luca, hier ist die PHP-und Javascript-code, der sofort ausgeführt:
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)
})
}
InformationsquelleAutor Steve Gattuso | 2009-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Dashcode klicken Sie auf Widget-Attribute dann Ermöglichen den Zugriff stellen Sie sicher, dass die option aktiviert ist. Ich habe etwas gebaut, dass Sie einfach nicht arbeiten wollte, und dies war die Lösung.
InformationsquelleAutor Tom
Cross-domain Ajax requests ( Mit dem XMLHttpRequest - /ActiveX-Objekt ) sind nicht erlaubt, in den aktuellen standard, wie pro die W3C-spec:
Aber es ist 1 Methode, dies zu ajax Anfragen cross-domain, JSONP, indem Sie ein Skript-tag auf der Seite, und mit ein wenig server-Konfiguration.
jQuery unterstützt diese, sondern reagieren auf den server mit dieser
möchten Sie reagiert mit diesem:
myCallback muss der Wert in der "callback" - parameter übergeben $.getJSON() Funktion. Also wenn ich mit PHP, das funktionieren würde:
Können wir sehen, das Javascript und die PHP-code? Auch ist der Javascript-Konsole ausgeben Fehler?
Dort gehen Sie, und Nein, dashcode ist nicht die Berichterstattung etwas in der runlog.
Ein Dashboard-widget ist im wesentlichen eine web-Seite-eine Anfrage an einen server irgendwo. Keine domain-Kreuzungen, auch wenn die OQ (ursprüngliche Fragesteller) stellt es in Frage.
InformationsquelleAutor Luca Matteis
In Ihrem Info.plist, die Sie benötigen, um den Schlüssel AllowNetworkAccess auf true gesetzt.
Dein code funktioniert in Safari, denn er ist nicht eingeschränkt in der dashboard-sever und es ist nicht standards complient, dass es NICHT erlaubt cross-site AJAX. FF IST standards complient, dass es NICHT ermöglichen cross-site ajax.
InformationsquelleAutor Hyposaurus
Wenn Sie erstellen ein dashboard-widget, warum Sie nicht verwenden die XMLHttpRequest-Setup-Funktion in der code-Bibliothek von DashCode. Apple baute diese in so dass Sie nicht installieren müssen 3rd-party-JS-Bibliotheken. Ich bin mir nicht sicher über die JSON-Unterstützung, aber vielleicht ab hier führt Sie in eine bessere Richtung.
InformationsquelleAutor Paulo
Interessant, dass es funktioniert in Safari. Soweit ich weiß, x zu tun-domain-ajax-Anfragen, die Sie verwenden müssen, um die jsonp-Datentyp.
http://docs.jquery.com/Ajax/jQuery.getJSON
http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/
Grundsätzlich müssen Sie
callback=?
um Ihre Abfrage-string und jquery wird automatisch ersetzen Sie es mit der richtigen Methode z.B.:BEARBEITEN: legen Sie die
callback=?
bit am Ende des query-string nur um sicher zu sein.InformationsquelleAutor roborourke