"missing ; before statement" - Fehler für die getJSON-Aufruf
Kann mir bitte jemand erklären die folgenden. Habe ich durchforstete das Netz nach Altersstufen, die versuchen Hilfe zu finden und ich glaube, ich mache alles richtig, aber noch immer Fehler.
Ich habe Folgendes script auf meiner Seite:
function GetPageAdvert2(url) {
$.getJSON('http://url/servicename.asmx/CheckAdvert?callback=?',
{
pagename: url,
success: function(data) { alert(data) }
});
};
Und mein webservice gibt nichts mehr als:
jsonp1301065851157('url/KiN_150x300.jpg');
Das problem ist, dass wenn ich Anrufe, GetPageAdvert2, nichts ist passiert.
Mein WebService (geschrieben in VB.Net) ist:
<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json, XmlSerializeString:=False, UseHttpGet:=True)> _
Public Sub CheckAdvert(ByVal pagename As String, ByVal callback As String)
Dim pageUID As Integer = 0
Dim advertURL As List(Of aU) = New List(Of aU)()
Dim sss As String
Using con As New System.Data.SqlClient.SqlConnection(My.Settings.sqlConnection2)
SQL STUFF IN HERE
the SELECT statement will return a value and place it in Variable SSS
End Using
Context.Response.ContentType = "application/json"
Context.Response.Write(callback & "('" & sss & "');")
Context.Response.End()
End Function
Die Antwort, die ich bin immer wieder (in der FF) ist:
PARAMS:
callback jsonp1300979718942
contentType application/json; charset=utf-8
pagename default.html
success undefined
RESPONSE:
jsonp1301065851157('url/KiN_150x300.jpg');
Dies ist vor allem, was, glaube ich, korrekt zu sein.
Aber der "Alert(data)" nicht produzieren etwas anderes als "undefined".
- JSON sollte beginnen und enden mit geschweiften Klammern: {"url":"KiN_150x300.jpg"}
- das stimmt nicht: in diesem Fall, der server gibt ein Objekt zurück, eingewickelt in ein array.
- Falsch. Das ist, wenn Sie nur wollen, um zurück zu einem einzigen Objekt. Wenn Sie möchten, geben ein array zurück, Sie beginnen mit surround es mit
[]
. - Ok, jetzt müssen Sie Sie zu ersetzen
test
mit dercallback
parameter. Wenn Sie definieren einefunction test(a) { alert(a); }
nun, gibt es Alarm so etwas wie[object Object]
? - Nein, ich bekomme ein 200 OK (Fehler) in FireBug. Ebenso weiß ich nicht, was der parameter callback wird, sobald Sie eine beliebige Zahl (siehe editierten Beitrag), ich denke, es ist wie ein Unix-Timestamp.
- Also funktioniert es jetzt oder hast du noch eine Fehlermeldung erhalten? Der parameter callback ist der name einer Funktion, die aufgerufen wird, sobald das Skript injiziert in Ihre Seite ein.
- Nein, sorry, noch immer ein Fehler (fehlen ; ). Sache ist, die "Erfolg" ich denke, dass wird genannt, dass ist die EINZIGE Warnmeldung, die ich in meinem script und es ist mit der Meldung "undefined".
- Ah, jetzt ist es klarer (bitte Einrücken von code durch 4 Leerzeichen mit dem code
{}
- Taste): der server antwortet mit einem XML-Dokument nicht mit einem einfachen JavaScript-Anweisungjsonp1300979718942([{"url":"[removed]/KiN_150x300.jpg"}])
. Sehen, wenn Sie den rest Los. Was server-side-Sprache, die Sie benutzen? - Ich bin froh, dass es mehr klar, weil es nicht zu mir! haha. OK, gut, ich habe eingerückt, den code durch 4 Leerzeichen, die Antwort, die ich zurück bekommen (von FireBug) liest nun den Wert "<?xml version="1.0" encoding="utf-8"?> <string xmlns="[url,/">jsonp1301039560625( [{"url":"url/KiN_150x300.jpg"}])</string>" doch ich bin noch immer die "missing ;" Fehler. Die server-Seite Sprache ist VB.Net. Ich habe aktualisiert mein original-Beitrag mit dem, was da ist.
- Nein, das Einrücken gemeint ist, für diese Website, nicht für Ihren code auf dem server. Das problem ist VB.net Verwandte: Sie sollten wohl einfach nur "print" der string
jsonp1301039560625([{"url":"url/KiN_150x300.jpg"}])
an den client, sollten Sie nicht die Ausgabe ein XML-Dokument, da der server nicht im moment. - Schließlich löste es. Bearbeiten, meinen obigen post zu zeigen, was ich getan habe. Vielen DANK für Ihre Hilfe und Unterstützung, es ist sicherlich eine Erkenntnis, und während ich bin nicht 100% überzeugt, meine Lösung funktioniert für alles, was (vielleicht wird es nicht in ein array?), es ist sicherlich dazu beigetragen, mich zu verstehen. Nochmals meinen aufrichtigen Dank für Ihre Geduld in dieser.
- nun bewaffnet mit der Tatsache, dass ich zurückkehren werde einen JavaScript-Aufruf, wie ist das nun möglich, den Rückgabewert zu meinem ursprünglichen Aufruf auf dem client? Der "Erfolg" Teil der getJSON scheint nicht, etwas zu tun?
- Suchen Sie in Ihrer aktuellen code, es scheint, dass Sie ausgeben
test(
, aber Sie sollten geben Sie den Wert dercallback
parameter, so etwas wieContext.Response.Write(callback & "(" & js.Serialize(sss) & ")")
sollte ausreichen. - ok habe das gemacht und bekomme KEINE Fehler. Die Antwort sicher genug ist jetzt "jsonp1301060523484('url/KiN_150x300.jpg');" aber das ist es nicht! Alles, was du sagst macht Sinn so weit, es ist nur das Letzte bit ich zu kämpfen mit - d.h. Sie bekommen die Daten zurück an den client.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bei der Verwendung JSONP, kann man nicht einfach wieder einen JSON-string, da der string zurückgegeben wird tatsächlich injiziert in die aktuelle Seite in einem neuen
script
element. Sie brauchen, um wieder eine gültige JavaScript-Anweisung, ruft eine callback-handler, in denen die Antwort analysiert.Da ist ein Beispiel auf der Wikipedia-Seite:
Beachten Sie, dass diese syntax ist nicht gültig JSON, das ist in diesem Fall nicht benötigt, da Sie nur ein JavaScript-Objekt im buchstäblichen notation.
Außerdem, wie x10, sagte in seinem Kommentar, jQuery Veränderungen der
?
imcallback
query-parameter, um eine einzigartige Funktion, die Sie aufrufen soll, also nicht nur kopieren-kopieren Sie das obige Beispiel, aber ersetzenparseResponse
mit der genannten parameter.Update: die Letzte Sache, die Sie ändern sollten sind die Parameter zu
jQuery.getJSON
: die syntax sieht wie folgt aus:So dass Sie sollten geben Sie einfach Ihre success-Funktion als der zweite oder Dritte parameter, die nicht Teil eines Objekts sind (vergleichen Sie hierzu auch die Allgemeinen
jQuery.ajax()
function call):Ich denke, deine Funktion sollte so Aussehen:
Beachten Sie, dass der Erfolg ist eine Eigenschaft der getJSON. Sie hatte es außerhalb
jQuery.getJSON()
; Sie sind eine Vermischung dieser Funktion mit dem AllgemeinenjQuery.ajax()