Резюме
У меня есть приложение, которое выполняет поиск. Прежде чем разрешить отправку, он отправляет запрос AJAX на запрос для проверки действительного почтового индекса, а затем возвращает результат JSON, который я могу проанализировать. Мне нужно сделать то же самое в кросс-домене, и я знаю, что вместо этого я должен использовать полный URL-адрес и формат JSONP, но я не уверен, как это установить.
на основе AJAX вызов
Я посылаю почтовый индекс, который получает пробежать запрос.JQuery AJAX Как мне получить JSONP вместо JSON?
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);
}
}
});
}
ФКК в Coldfusion, который запускает запрос
<!---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>
The JSON Response
Это то, что запрос возвращает.
{"message":"Invalid Zip","formError":true}
Работа с откликом
Как я выше в функции успеха AJAX, я могу захватить formError или переменные сообщения из ответа JSON. Как я могу это сделать с JSONP?
success: function(obj) {
var response = $.parseJSON(obj);
if (response.formError == true) {
alert(response.message);
}
}
Пожалуйста, не создавайте вручную json, не создавайте объект и не используйте serializeJSON. Это позволит избежать возможных ошибок формата JSON из-за содержимого строк, которые вы размещаете в json. –
Кроме того, несколько советов. A) Функция не должна напрямую обращаться к области «url». Вместо этого явным образом определяю «zip» и «callback» как cfarguments. b) Всегда используйте cfqueryparam для защиты от SQL-инъекции. c) Не забывайте локальную область * все * вашей локальной функции и d) нет необходимости в cfoutput в конце. Просто верните строку. Так как вы cfml везде, можете использовать 'cfreturn' вместо перехода на cfscript. – Leigh
Кевин - Не уверен, могу ли я это сделать. Поскольку это уже не JSON, а JSONP и больше строки, я не уверен, что serializeJSON будет работать. – madvora