JQuery AJAX Wie bekomme ich und analysieren JSONP anstelle von JSON?
Zusammenfassung
Ich habe eine Anwendung, die eine Suche. Bevor Sie senden, sendet er einen AJAX-Aufruf eine Abfrage, um zu überprüfen, ob ein Gültiger zip-code, und gibt dann eine JSON-Resultat, das ich analysieren kann. Ich brauche die gleiche Sache zu tun cross-domain jetzt, und ich weiß, dass ich die volle url und JSONP-format anstelle, aber ich bin mir nicht sicher, wie Sie dies einrichten.
Der AJAX-Aufruf
Ich senden Sie ein zip-code, der ausgeführt wird durch eine Abfrage.
if (zipLength == 5) {
$.ajax({
type:"GET",
//location of the cfc
url: "cfc/test.cfc",
//function name and url variables to send
data: {method:'zip_lookup', zip:zip},
//function run on success takes the returned json object and reads values.
success: function(obj) {
var response = $.parseJSON(obj);
if (response.formError == true) {
alert(response.message);
}
}
});
}
Der CFC in Coldfusion Läuft Die Abfrage
<!---Makes sure entered zip exists--->
<cffunction name="zip_lookup" access="remote">
<cfquery name="qZip">
Select Distinct ZipCode
From zipcodes
Where ZipCode = '#url.zip#'
</cfquery>
<!---Return an error if zip was not found--->
<cfif qZip.RecordCount EQ 0>
<cfset formError = true>
<cfset message = "Invalid Zip">
<cfelse>
<cfset formError = false>
<cfset message = "">
</cfif>
<cfoutput>
<cfset obj =
{
"formError" = formError,
"message" = message
}
/>
</cfoutput>
<cfprocessingdirective suppresswhitespace="Yes">
<cfoutput>
#serializeJSON(obj)#
</cfoutput>
</cfprocessingdirective>
<cfsetting enablecfoutputonly="No" showdebugoutput="No">
</cffunction>
Die JSON-Antwort
Dies ist, was die Abfrage zurückgibt.
{"message":"Invalid Zip","formError":true}
Umgang Mit Der Antwort
Wie ich schon oben in der AJAX-success-Funktion, die ich greifen kann, die formError oder message-Variablen aus der JSON-Antwort. Wie ich kann ich dies mit JSONP?
success: function(obj) {
var response = $.parseJSON(obj);
if (response.formError == true) {
alert(response.message);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich die Antwort.
Bitte beachten Sie die original geposteten code funktioniert es bestens mit einer normalen JSON-Antwort.
Dies ist der Weg, ich bekam die JSONP-Antwort zu arbeiten.
Der AJAX-Aufruf
Der CFC in Coldfusion Läuft Die Abfrage
Die Formatiert JSONP-Antwort
url
Umfang direkt. Stattdessen explizit definieren, "PLZ" und "callback" als cfarguments. b) verwenden Sie Immer cfqueryparam zum Schutz vor sql-injection-c) vergessen Sie nicht die lokalen scope alle in Ihrer Funktion lokale Variablen und d) Keine Notwendigkeit für cfoutput am Ende. Nur die "Rückkehr" der string. Da Sie cfml, wie überall sonst, auchcfreturn
statt der Umstellung auf cfscript.serializeJSON
zu konstruieren, die den JSON-string inside die callback-wrapper, statt es manuell zu tun.return arguments.callback & "(" & serializeJSON({formError: formError, message: message}) & ")";
Uncaught SyntaxError: Unexpected token :
eine Idee wie man es beheben?Für jsonp, die Sie gerade benötigen, um den Datentyp, wie im folgenden Beispiel
Lesen : Arbeiten mit JSONP