Jquery Ajax получает вызов с использованием coldfusion 9: JSON.parse: неожиданный символ - PullRequest
2 голосов
/ 11 ноября 2011

Я новичок в AJAX, поэтому приношу свои извинения.

Я пытаюсь извлечь данные из базы данных в компоненте cfc, используя <cfquery>, а затем преобразовать его в JSON с помощью функции serializeJSON(var),Но в firebug я получаю ошибку «неожиданного персонажа».В запросе есть пути к файлам, поэтому может ли это иметь какое-либо отношение к проблеме, или я все-таки неправильно назвал AJAX-вызов?

<cfcomponent>
<cffunction name="getStuff" access="remote" returnFormat="json">
    <cfargument name="userID" type="numeric" required="yes">
    <cfset datasrc = “data">
    <cfset pass = "">
    <cfquery datasource="#datasrc#" password="#pass#" name="getData" maxrows="25">
            SELECT blah
                FROM blah
                WHERE blah = ‘#userID#'
    </cfquery>
    <cfset jsondata = serializeJSON(getData)>
    <cfdump var="jasondata">
    <cfreturn jsondata>
</cffunction>

Javascript:

function populateBrews(id) {    
$.ajax({

    url: "/components/Object.cfc"

  , type: "get"

  , dataType: "json"

  , data: {
  method: "getStuff"

 , userId: id
 }

 , success: function (data){
 }

, error: function (xhr, textStatus, errorThrown){ 
alert(errorThrown);
}
});
}

Ответы [ 5 ]

4 голосов
/ 11 ноября 2011

Вы JSON-ifying свой JSON.Видите, как у вас есть returnFormat = json в функции?Это говорит CF, чтобы взять результат и превратить его в JSON.Но вы сами создаете строку JSON, когда возвращаете результат.В общем, вы сериализуете уже сериализованный результат.Измените

<cfset jsondata = serializeJSON(getData)>
<cfdump var="jasondata">
<cfreturn jsondata>

на

<cfreturn getData>
1 голос
/ 11 ноября 2011

Убедитесь, что отладка запроса отключена - выходные данные отладки прервут синтаксический анализ json.

0 голосов
/ 02 августа 2013

Как уже упоминалось во многих ответах, проверьте свой XHR.responseHeader ... скорее всего, ваши данные возвращают что-то вроде <WDDX packet version='1.0'><header/><data>..., за которым следует ответ в формате JSON.

В этом случае добавьте responsetype='JSON', чтобы удалить форматирование WDDX.

0 голосов
/ 11 ноября 2011

Я уверен, что ответ Рэя правильный. Ваша функция должна сохранять returnformat = json и просто возвращать набор результатов getData без каких-либо изменений.

Если вы разрабатываете для Windows, я бы рекомендовал использовать Fiddler и использовать его для просмотра запросов от вашего браузера и ответа от CF. Используйте инспекторы RAW и JSON Response, чтобы точно узнать, что возвращает CF. Нам часто приходилось добавлять приведенный ниже код в наши методы удаления CFC, чтобы убедиться, что в него не включены другие выходные данные, которые могут нарушить JSON:

0 голосов
/ 11 ноября 2011

Попробуйте: используйте json2.js

var postdata = new Object(); 
postdata.parameter1 = <value>; 
postdata.parameter2 = <value>;  

$.ajax({  
type: "POST",  
url: "url",  
dataType: "application/json",  //this is important
data: JSON.stringify(postdata),  
async: true,  
success: function (data) { Handler_Success(data); }  
});  
});  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...