2016-07-12 5 views
1

Я посылаю $http запрос на мой сервер и мой формат ответа является [SERVICE_NAME = XYZ][PRAMA = YZR], после того, как запрос закончил я получаю эту ошибку:Угловое - Неожиданные лексем х в формате JSON в положении 1 - реакция начинается с [

SyntexError: Unexpected token S in JSON position 1 at Object.parse 

Я думаю, что это связано с тем, что ответ начинается с [, с кем я столкнулся и решил эту проблему? Вот мой $http запрос:

var promise = $http({method : 'GET', url : baseUrl, headers:{"Content-Type":text/html}, params:queryParams}).then(function(response){ 
     console.log(response); 
     retuen response.data; 
    }, function(error){ 
     console.log(error) 
    }) 
    return promise; 
}; 

Я знаю, что мой response не непросроченный JSON, еще мне нужно, чтобы разобрать его.

Спасибо.

+1

К сожалению, ответ, который вы получаете, не является JSON. Юридический JSON будет выглядеть как '{" SERVICE_NAME ":" XYZ "," PRAMA ":" YZR "}' – phuzi

+0

Я знаю, что это не json, и я не могу его изменить (из моей БД). –

+0

Позвольте мне изменить вопрос. –

ответ

3

Не возвращайте свой ответ с application/json типа контента. Если у вашего ответа есть заголовок Content-Type со значением application/json, Angular автоматически проанализирует JSON. Верните свой ответ с типом контента text/plain, чтобы избежать этого.

Другой вариант, чтобы установить реакцию преобразования функции вручную, например:

$http({ 
    url: '...', 
    method: 'GET', 
    transformResponse: [function (response) { 
     // Data response is plain text at this point 
     // So just return it, or do your parsing here 
     return data; 
    }] 
}); 
+0

Попытка и публикация результатов. –

+0

Работает правильно! Благодарю. –

2

Вам необходимо настроить со стороны сервера, чтобы отправить данные как text/plain Этот код может вас сэкономить.

response.setContentType("text/plain"); 
+0

Попытка и публикация результатов. –

+0

Я добавил это на свой сервер, и это помогло решить проблему. –

0

Вы орфографическая ошибка в тесте/html

var promise = $http({method : 'GET', url : baseUrl, headers:{"Content-Type":text/html}, params:queryParams}).then(function(response){ 
     console.log(response); 
     retuen response.data; 
    }, function(error){ 
     console.log(error) 
    }) 
    return promise; 
}; 
+0

Нет, это «Content-Type»: «text/html» просто опечатка. –

2

Я не уверен, но почему ваш заголовок как: headers:{"Content-Type":text/html}, это выглядит не так. Почему не headers:{"Content-Type": 'text/html'}

Кроме того, заголовок Content-Type указывает только кодирование контента, но не ответа, попробуйте добавить «Accept» заголовок:

headers:{'Content-Type': 'text/html', 'Accept': 'text/plain'} 

Вот официальные спецификации W3C протоколов и заголовки https://www.w3.org/Protocols/rfc2616/rfc2616-sec14