sirve que para headers example angular http post

headers - para que sirve el subscribe en angular



Angular2 http.post se ejecuta dos veces (3)

Me encontré con un problema extraño donde el servicio Http de Angular2 (RC1) ejecuta la llamada http.post dos veces. He depurado mi aplicación y sé con certeza que este no es un problema de clic. Todas las llamadas que conducen a la llamada al servicio principal

public create(json: Object, params?: Object): Observable<T> { let body = JSON.stringify([json]); let headers = this.getHeaders(); let options = new RequestOptions({ headers: headers }); return this._http.post(this.createURL(this.getCreateURL(), [], params), body, options) .map(res => this.handleObjectResponse(res)); }

se ejecutan una vez. Luego, cuando comencé a rastrear el problema, descubrí que mi controlador this.handleObjectResponse se ejecuta dos veces. Así que ahondé más y llegué a @angular/http/src/backends/xhr_backend.ts donde hacen esto

constructor(req: Request, browserXHR: BrowserXhr, baseResponseOptions?: ResponseOptions) { this.request = req; this.response = new Observable<Response>((responseObserver: Observer<Response>) => { let _xhr: XMLHttpRequest = browserXHR.build(); _xhr.open(RequestMethod[req.method].toUpperCase(), req.url); // load event handler ... ..

Así que puse un punto de interrupción en this.request = req; y luego otro punto de interrupción en let _xhr: XMLHttpRequest = browserXHR.build(); y descubrí que golpeé el primer punto de interrupción una vez, pero luego golpeé dos veces el segundo punto de corte de la devolución de llamada.

Esto me ha estado volviendo loco, así que quería comprobar si alguien familiarizado con los componentes internos de angular2 podría arrojar algo de luz si esto parece un error o algo que he hecho mal.

En mi código, he creado algunas clases de servicios genéricos abstractos: GenericService y FullService, que amplía GenericService. Ambos son abstractos y usan genéricos y las clases de servicios reales que se inyectan en los diferentes componentes extienden GenericService o FullService. ¿Ustedes piensan que esta configuración podría ser responsable de las ejecuciones de doble publicación?

¡Todas las ideas son apreciadas!

¡Gracias por adelantado!

PD

Esto no ocurre con get pero también ocurre con puts.


El servicio http devuelve un observable frío que se ejecuta en cada suscripción , desea convertirlo en un elemento observable que solo se ejecuta en la primera suscripción y comparte el mismo valor para las subscripciones subsiguientes.

Para convertirlo todo lo que tienes que hacer es github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/… :

return this._http.post(this.createURL(this.getCreateURL(), [], params), body, options) .map(res => this.handleObjectResponse(res)) .share();


Esto me estaba sucediendo porque tengo (key.enter)="someSubmitFunction()" en uno de los campos de entrada de un formulario. Cuando presiono Enter en este campo, el formulario se enviaría dos veces. Aparentemente, esto no fue necesario. Cuando eliminé esto, el formulario aún se enviará cuando presione enter, pero ahora solo una vez.


its happening because HTTP OPTIONS executed first, and you have to restrict unwanted HTTP method before executing your Logic, always use isset method,see example below if(isset($_POST)) { $name = $_POST["name"]; $country = $_POST["country"]; $sql = ''INSERT INTO user values("'' . $name . ''","'' . $country . ''")''; if ( $conn->query($sql)=== TRUE) { $outp = "Inserted " . $name . " and " . $country; echo json_encode($outp); } else { echo json_encode("Error: " . $sql . "<br>" . $conn->error); } } here it will insert row in table only when its POST METHOD.