2016-08-11 3 views
1

Мои Angular2 (RC4) получает данные из моего WepApi используя следующий фрагмент кода:Mozilla косяк Анализировать JSON

getAppointment(id: number): Observable<Event> { 
    return this._http.get(this._serviceUrl + 'get/' + id) 
     .map(this.extractData) 
     .catch(this.handleError); 
} 

this.extractData делает следующее:

private extractData(res: Response) { 
     let body = res.json(); 
     return body || {}; 
} 

Это все работает, как ожидается, в Chrome, IE, пограничный, но терпит неудачу в Mozilla бросает эту ошибку:

JSON.parse: unexpected character at line 1 column 1 of the JSON data 

это приводит обратно к @ angluar2/HTTP модуль static_response.d.ts.

/** 
* Attempts to return body as parsed `JSON` object, or raises an exception. 
*/ 
json(): any; 

и, таким образом, в static_response.d.js:

/** 
* Attempts to return body as parsed `JSON` object, or raises an exception. 
*/ 
Response.prototype.json = function() { 
    var jsonResponse; 
    if (http_utils_1.isJsObject(this._body)) { 
     jsonResponse = this._body; 
    } 
    else if (lang_1.isString(this._body)) { 
     jsonResponse = lang_1.Json.parse(this._body); 
    } 
    return jsonResponse; 
}; 

Почему оленья кожа эту работу в Mozilla? Это ошибка в @ angular2/http?

+1

Не могли бы вы попробовать добавить 'console.log (res.text());' в начале 'extractData' - просто посмотреть, что там? Возможно, первый символ '' 'из-за 404 из api. – rinukkusu

+0

Текст показывает «нормальный» XML, который действительно начинается с «<» .. – Paul

+0

Я думаю, это сообщение об ошибке из API? – rinukkusu

ответ

0

Я также получаю такую ​​же проблему.

Но у меня есть решение, изменив конфигурацию браузера, и она работает.

сделайте это (его не правильный путь, но он будет работать).

Открыть о: config в закладке FF. Чем найти Network.http.accept.default.

значение = Текст/HTML, приложение/XHTML + XML, приложение/XML; д = 0,9, /; д = 0,8

новое значение = текст/HTML, приложение/XHTML + XML, приложение/JSON; q = 0,9, /; q = 0,8

+0

Работает как шарм ... но как рассказать конечным пользователям ....? – Paul

+0

Я думаю, что это поможет вам: http: // stackoverflow.com/questions/9847564/how-do-i-get-asp-net-web-api-to-return-json-вместо-xml-using-chrome –

+0

Как я могу попросить моих клиентов сделать это? Более 300 офисов! – bunjeeb

0

Since this is too long for a comment, I added this as an answer - if it doesn't work I'll remove it.


Вы можете попробовать и явно добавить заголовок Accept, чтобы сообщить серверу, что вы ожидаете в JSON строку в качестве ответа, так что вы случайно не получить XML, например, так:

getAppointment(id: number): Observable<Event> { 
    let headers = new Headers(); 
    headers.append('Accept', 'application/json'); 
    let options = new RequestOptions({ headers: headers }); 

    return this._http.get(this._serviceUrl + 'get/' + id, options) 
     .map(this.extractData) 
     .catch(this.handleError); 
} 
+0

жаль ... никаких изменений вообще .. – Paul

+0

Неужели вы пишете API самостоятельно? – rinukkusu

+0

Его стандартный WebApi, сделанный с VS .. Я простудился, только жалуется Mozilla .. Chrome и IE потребляют WebApi таким же образом, и нет проблем вообще .... – Paul

Смежные вопросы