2016-04-28 77 views
2

我正在採取一個窗體的領域,並將其傳遞到服務爲this.form.value當我在控制檯上登錄this.form.value我得到Object { email: "zxzx", password: "zxzxx" }當我發送相同的東西到服務並調用服務器,如:Angular2發佈請求不發送正確的數據到服務器

import {Http} from 'angular2/http'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/toPromise'; 
import {Injectable} from 'angular2/core' 
import {Post} from './post'; 
import {Observable} from 'rxjs/Observable'; 


@Injectable() 
export class PostService { 
//dependency injection 
private _url = "http://127.0.0.1/accounts/login_user/"; 
constructor(private _http:Http) { 

} 


createPost(post){ 

    return this._http.post(this._url,JSON.stringify(post)) 
    .map(res=>res.json()); 

} 
} 

正在調用服務器,但值不被傳遞。當我登錄我越來越控制檯上的反應:

Object { _isScalar: false, source: Object, operator: Object }

有人可以幫我解決這個問題?

謝謝。

回答

2

console.log打印可觀察到的相應你的要求,但不是它的結果。如果你想打印這個結果,你可以使用do操作:

createPost(post){ 
    return this._http.post(this._url,JSON.stringify(post)) 
    .map(res=>res.json()) 
    .do(data => { 
     console.log(data); 
    }); 
} 

你說的請求被執行。它實際上的情況下,如果您訂閱的可觀察到的:

this.service.createPost(...).subscribe(() => { 
    (...) 
}); 

編輯

您還需要設置Content-Type頭:

createPost(post){ 
    var headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    return this._http.post(this._url,JSON.stringify(post), { headers }) 
    .map(res=>res.json()) 
    .do(data => { 
     console.log(data); 
    }); 
} 

EDIT2

如果您想要發送網址編碼的表單:

您還需要設置Content-Type頭:

createPost(post){ 
    var headers = new Headers(); 
    headers.append('Content-Type', 'application/x-www-form-urlencoded'); 

    let content = new URLSearchParams(); 
    content.set('prop', post.prop); 
    (...) 

    return this._http.post(this._url, content.toString(), { headers }) 
    .map(res=>res.json()) 
    .do(data => { 
     console.log(data); 
    }); 
} 
+0

我收到一個異常說:'TypeError:this.postService.createPost(...)。訂閱不是函數「# – Subhajit

+0

我的答案中有一個錯字。你可以做一個新的嘗試嗎? –

+0

我刪除了額外的支架並且運行得更早,但即使如此它也沒有給出TypeError:do不是函數 – Subhajit

2

您需要subscribe()否則可觀察到的什麼都不會做:

createPost(post){ 
    return this._http.post(this._url,JSON.stringify(post)) 
    .map(res=>res.json()) 
    .do(val => console.log(val)); 
} 

... 
this.createPost(...).subscribe(data => console.log(data)); 
+0

我正在一個異常說:'類型錯誤:this.postService.createPost(...)認購不是function' – Subhajit

+0

它不明顯如何使用createPost。如果你想在呼叫網站上打電話訂閱,那麼你不應該像我在我的答案中那樣訂閱功能。 –

+0

我更新了我的答案。 –

-1

我想這個問題是基於您的數據編碼。

您傳遞的數據爲JSON(JSON.stringify(post)),但使用request.POST.get('email')來處理服務器上的數據,該數據只適用於form data

也許這個鏈接將幫助您:Trying to parse `request.body` from POST in Django

+0

可以請你更具體一點嗎? – Subhajit

+0

request.POST.get('email')'如果你發送給服務器的數據是'application/x-www-form-urlencoded'格式的話就可以工作(參見[Wikipedia](https:// en。 wikipedia.org/wiki/POST_(HTTP))以獲取更多信息)。您以JSON格式發送數據。我提供的鏈接顯示了在這種情況下如何處理數據。 – fknx

相關問題