typescript - Angular 2 Misslyckades med att köra open på XMLHttpRequest: Ogiltig URL
Jag försöker ringa en tjänst, den fungerar i DHC, men när jag försöker ringa den i mitt Angular 2-projekt kraschar det, metodförfrågan är POST, tar emot ett objekt från body som har en e-post och ett lösenord, och svaret är en token som jag kommer att använda i hela projektet för auktorisation.
Här är min kod.
import { Injectable } from '@angular/core';
import { Http, Response, Headers, Request ,RequestOptions ,RequestMethod } from '@angular/http';
import {Observable} from 'rxjs/Rx';
import 'rxjs/add/operator/map';
@Injectable()
export class LoginService {
constructor(private http:Http) {
}
getToken(){
var baseUrl = "xxx.xxx.x.xxx:xxxx/project/v1/admin/login";
var headers = new Headers();
headers.append("Content-Type", 'application/json');
var options = new RequestOptions({ headers: headers });
var objeto = {'email': 'xxxxxx', 'pass':'xxxx' }
var body2 = JSON.stringify(objeto);
var xhr = new XMLHttpRequest();
return this.http
.post(baseUrl, body2, options)
.map((response: Response) => response.json())
.subscribe(
data => console.log('Success uploading the opinion '+ data, data),
error => console.error(`Error: ${error}`)
);
}
}
Jag försöker implementera ett XMLHttp Request-anrop från Angular 2, men felet är detsamma, jag vet inte om jag kan använda det i Angular 2, här är metoden
return Observable.fromPromise(new Promise((resolve, reject) => {
// let formData: any = new FormData();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
resolve(JSON.parse(xhr.response));
} else {
reject(xhr.response);
}
}
}
xhr.open("POST", baseUrl, true);
xhr.send(body2);
}));
Hjälp :( och tack
Svar #1
Om det är en 192.168..-typ av URL bör du lägga till http:// eller https:// framför den. Och du kan behöva aktivera CORS-alternativ på serversidan.
Svar #2
I mitt fall kunde jag lösa det genom att fixa URL:en för min HTTP-förfrågan från klientsidan istället för serversidan som echonax nämnde på grund av att http:// saknades från localhost.
Mitt problem var, i min förfrågan this.http.get(this.domain + '/api/prod/' + id).map(res => res.json())
Jag saknade ett / på framsidan av api. Det borde vara /api