2012-06-12 4 views
5

Ich versuche, Daten von Server mit JSONP mit jQuery AJAX-Methode zu erhalten."(Callback-Methode) ist nicht definiert" in JSONP Zugriff auf Firefox Addon

$.ajax({ 
    dataType: "jsonp", 
    url: "https://secure.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json", 
    type: "GET", 
    data: "msg=aaa", 
    cache: true, 
    jsonp: "jsoncallback", 
    // jsonpCallback: "callbackmethod", 

    success: function(encryptedMsg){ 
     console.log("Encryption success!"); 
    }, 
    error: function(req, errmsg, thrownError) { 
     console.log("Error: HTTP " + req.status + " " + errmsg); 
    } 
}); 

wird jedoch folgende Fehler in Fehlerkonsole angezeigt:

Error: jQuery1720502636097747291_1339479763752 is not defined 
Source File: https://secure.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=jQuery1720502636097747291_1339479763752&msg=aaa 
Line: 1 

Wenn Sie die Quelldatei URL geöffnet haben, können Sie folgende JSON sehen, und es richtig JSON scheint.

jQuery1720502636097747291_1339479763752({ 
    "title": "Recent Uploads tagged cat", 
    // ... 
    "items": [ 
    { 
     "title": "Chaton", 
     // ... 
    }, 
    // ... 
    ] 
}) 

Ich habe auch versucht Methodennamen mit jsonpCallback angeben: „callbackmethod“, aber es hat nicht funktioniert. Ich habe auch $ .getJson() -Methode und jquery-jsonp (http://code.google.com/p/jquery-jsonp/) verwendet, aber das Ergebnis war das gleiche.

Der Browser ist Firefox und HTML4 verwenden. Dies wird in einem Firefox-Addon verwendet.

können Sie hier vollständigen Code lesen: https://builder.addons.mozilla.org/addon/1048275/revision/749
Ich benutze $ Schnipsel in getEncryptedMessage Funktion in Common-content.js

Vielen Dank im Voraus.

+2

Also, hast du es versucht, ohne den Jsonp Callback zu spezifizieren? jQuery sollte das für Sie erledigen. – alexn

+0

Ja, ich habe es versucht. Ich habe versucht, in diesem Code auf flickr zuzugreifen und muss es angeben, aber eigentlich möchte ich auf meine eigene Web-App zugreifen. Ich habe versucht, ohne Angabe von "jsonp:" auf meine eigene Server-App zuzugreifen. –

Antwort

3

Verwenden Sie JSONP nicht in Firefox-Erweiterungen. Wenn es funktionierte, wäre das ein Sicherheitsproblem, da einige Webserver Code im Kontext Ihrer Erweiterung ausführen konnten. In deinem Fall klappt es aber nicht, weil content scripts don't access the web page directly. Das JSONP-Skript wird im Kontext der Webseite ausgeführt und kann keine vom Inhaltsskript definierten Funktionen anzeigen.

Sie sollten die request module verwenden, um Anfragen an alle Webserver zu stellen, es unterstützt das JSON-Format. Sie können es natürlich nicht aus einem Inhaltsskript verwenden, aber Sie können eine Nachricht zurück an die Erweiterung senden, die Erweiterung sollte dann die Anforderung stellen und die Serverantwort zurück an das Inhaltsskript senden. Siehe Dokumentation unter communicating with content scripts.

+0

Oh ... JSONP war falsch in Firefox-Erweiterungen. OK, ich werde es versuchen. Vielen Dank! –

Verwandte Themen