La fin inattendue de JSON entrée dans la requête Http get Angulaires de 2 à Codeigniter
Angulaire 2 avec Codeigniter Bonjour tout le Monde, le Programme fonctionne parfaitement. Mais
J'obtiens l'erreur "fin Inattendue de JSON entrée" lors de l'envoi de requête Http get Angulaires de 2 à Codeigniter Contrôleur "Entry.php"
Plunker code est à ce lien:
https://plnkr.co/edit/MHVVkWwFqEggqSI5b6B2?p=info
Même code est collé ici aussi:
app.le module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpModule } from "@angular/http";
import { AppComponent } from './app.component';
import { EntryService } from './entry.service';
@NgModule({
imports: [
BrowserModule,
HttpModule
],
declarations: [
AppComponent
],
exports: [ //export for the DemoModule
AppComponent
],
providers: [ EntryService],
bootstrap: [ AppComponent ]
})
export class AppModule { }
app.composante.ts
import { Component, OnInit} from '@angular/core';
import { EntryService} from './entry.service';
@Component({
selector: 'my-app',
template: `
<h3>{{ errorMsg }} </h3>
<ul>
<li *ngFor="let s of scripts">{{ s.price }}</li>
</ul>
`,
})
class formEntry{
constructor(price: number, qty: number){}
}
export class AppComponent implements OnInit{
errorMsg: string;
data: formEntry;
constructor(private _entService: EntryService) { }
ngOnInit()
{
console.log('In OnInit: ');
this._entService.getData()
.subscribe(data => this.data = data,
resError => this.errorMsg = resError);
}
}
entrée.service.ts
import { Injectable } from '@angular/core';
import { Http, Headers, Response} from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/throw';
@Injectable()
export class EntryService {
constructor(private _http: Http) { }
getData(){
let myUrl = 'http://localhost/analy/entry/getData';
return this._http.get(myUrl)
.map((res: Response ) => res.json())
.catch(this._errorHandler);
}
_errorHandler(error: Response){
console.error(error);
return Observable.throw(error || "Server Error");
}
}
Entry.php
class Entry extends CI_Controller
{
function __construct()
{
parent::__construct();
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
}
function getData(){
$data = array('price' => 999,
'qty' => 8);
$jdata = json_encode($data);
return ($jdata);
}
}
Je suis en utilisant webpack 2. Le code n'est pas de travail à plnkr mais sur mon système. Mais il fonctionne parfaitement pour mydata.fichier json, mais en lui donnant une erreur pour la requête get "entrée/getData" (à partir de l'entrée.service.ts).
c'est la méthode getData dans Entry.php le contrôleur.
Ce qui peut être la cause possible et ce qui est possible de la solution..???
Svp quelqu'un peut m'aider à résoudre le problème.
OriginalL'auteur Ramji Makwana | 2017-03-02
Vous devez vous connecter pour publier un commentaire.
Vous essayez d'analyser une valeur null comme un JSON
Si res est null/indéfini/chaîne vide, vous obtiendrez l'erreur. Seulement de vérifier la valeur de
res
avant de faireres.json()
et vous n'aurez pas l'erreur. Pour être sûr de ce faire uneconsole.log(res)
avant d'essayer de l'analyser.merci pour l'explication.
OriginalL'auteur Gianluca Paris
Viens de tomber sur ce problème angulaire 4 quand j'ai mis à jour pour utiliser le nouveau HttpClient de @angulaire/common/http
La chose intéressante avec HttpClient est qu'il s'exécute automatiquement .json() de vos réponses. Cela provoque des problèmes lors de l'api renvoie une réponse vide.
Vous pourrez alors obtenir le la fin Inattendue de json erreur. La solution est de mettre responseType comme texte:
responseType: 'text'
et de gérer la réponse et l'analyse manuellement avectry catch
, de sorte que je n'ai pas de réponse, les erreurs sur vide réponses avec le code d'état 200.Sur mon dernier projet, j'ai changé mon statut de codes à 204 (Pas de Contenu) à la place du try catch route sur l'intercepteur qui ne l'exécute pas .json(). Depuis il est en fait Pas le Contenu qui doit être l'endroit où ils allaient avec la mise en œuvre. Pas sûr de ce qui est vraiment la bonne mise en œuvre, bien que certaines personnes probablement impossible de revenir en arrière et de changer tous leurs codes d'état.
avez-vous l'esprit de partage de la solution vous est venue?
J'ai ajouté une Gist avec mon intercepteur ici
OriginalL'auteur seescode