2017-03-17 22 views
5

Angular2 ile veri göndermeye çalışıyorum ama göndermek için çalışırken 400 kötü bir istek var ... Postacı ile test, her şey yolunda, bende 200 var ve başarı angular2Angular2 içinde form-data ile göndermek nasıl

with angular2

ile

I have a 200 and success...

Ama ben yanlış yapıyorum ne 400 kötü istek var? Teşekkür ederim !

Kodum.

userAddReview(paramsObj) { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json; charset=UTF-8'); 
    let params = this.util.transformRequest(paramsObj); 
    console.log('sending request'); 
    return this.authHttp.post(this.wpApiURL + '/users-reviews/reviews?' + params, JSON.stringify({}), { headers: headers }) 
     .map(
      res => { 
       let newReview = res.json(); 
       this.reviews.push(newReview); 
       console.log(this.reviews); 
       return newReview; 
      } 
     ); 
} 

Mesaj bileşeni:

submitReview(form) { 
    console.log(this.review, form); 
    let params = { 
     id: this.review.post, 
     user_id: this.wp.getCurrentAuthorId(), 
     name: this.wp.getCurrentAuthorId(), 
     email: this.wp.getCurrentAuthorId(), 
     title: this.review.rating_title, 
     description: this.review.rating_comment, 
     rating:  this.review.rating_score, 
    }; 
    console.log("Review", params); 
    this.review.author = this.wp.getCurrentAuthorId(); 
    this.wp.userAddReview(params) 
      .subscribe(
       data => { 
        this.statusMessage = "Review added successfully!"; 
        //clear form 
        form.reset(); 
       }, 
       error => { 
        console.log(error._body); 
        this.statusMessage = error._body; 
       } 
    ); 

Şablon: Service API çağırmak için

<form name="reviewForm" #reviewForm="ngForm" novalidate *ngIf="showPanel()"> 
    <div *ngIf="!reviewText.valid && (reviewText.dirty || reviewText.touched)" class="alert alert-danger padding">review is required</div> 

    <div class="padding">{{statusMessage}}</div> 
    <ion-input type="text" [(ngModel)]="review.rating_score" #reviewScore="ngModel" name="reviewScore" placeholder="enter your review score..." required></ion-input> 
    <ion-input type="text" [(ngModel)]="review.rating_title" #reviewTitle="ngModel" name="reviewTitle" placeholder="enter your review title..." required></ion-input> 
    <ion-textarea 
     [(ngModel)]="review.rating_comment" 
     #reviewText="ngModel" 
     name="reviewText" 
     type="text" 
     rows="2" 
     placeholder="enter your review..." 
     required 
     > 
    </ion-textarea> 

    <ion-grid> 
     <ion-row> 
      <ion-col *ngIf="!isEditMode"><button ion-button block (click)="submitReview(reviewForm)" [disabled]="!reviewForm.valid">Add</button></ion-col> 
      <ion-col *ngIf="isEditMode"><button ion-button block (click)="updateReview(reviewForm)" [disabled]="!reviewForm.valid">Update</button></ion-col> 
      <ion-col width-33><button ion-button block (click)="onCancel()">Cancel</button></ion-col> 
     </ion-row> 
    </ion-grid> 

</form> 

<p *ngIf="!showPanel() && auth.authenticated()" (click)="isEditing = true;">Add Review</p> 
<p *ngIf="!auth.authenticated()" (click)="reviewFormNotAuthClicked()">Add Review (login required)</p> 
+0

Zaten bana bu bulalım ... böyle bir şey cevaplamak ... – n00dl3

+0

yup, [işte] (http://stackoverflow.com/questions/41163706/read-angular2-post-data-in-php/41164367#41164367) – n00dl3

cevap

2

chris başlığıyla birlikte params göndermek Aşağıda ise kod

let url= `${this.wpApiURLl}users-reviews/reviews`; 
    let params = new URLSearchParams; 
    params.append('id', id); 
    params.append('user_id', user_id); 
return this.authHttp.post(url, { headers:headers, search:params }) 
.map(
      res => { 
       let newReview = res.json(); 
       this.reviews.push(newReview); 
       console.log(this.reviews); 
       return newReview; 
      } 
     ); 
+0

Teşekkür ederiz! Ama bende aynı hatadır. sizin koduyla ricam yükü geçerli: {başlıklar: {Content-Type: [ "application/json; charset = UTF-8"]}, ...} başlıkları : {Content-Type: [ "application/json, karakter kümesi = UTF-8 "]} içerik türü : [" uygulama/json; charset = UTF-8" ] : "uygulama/json; charset = UTF-8" ara : "id = 5 & kullanici_kimliği = 1 & ad = 1 & e-posta = 1 & title = sdsd & description = sdqffqs & derecelendirme = 5" – christophebazin

+0

URLSearchParams kullanarak parametreleri atayın let params = new URLSearchParams; params.append ('id', id); params.append ('user_id', user_id); ve paramları –

+0

başlıklarıyla birlikte gönderiniz Teşekkür ederiz! Denedim ama işe yaramaz, bir sonraki mesajla. – christophebazin

1

İsteğinizden ve görüntüden, form gövdesini isteğin gövdesi yerine URL yoluyla gönderiyorsunuz gibi görünüyor. Değişikliği:

return this.authHttp.post(this.wpApiURL + '/users-reviews/reviews?' + params, JSON.stringify({}), { headers: headers }) 

için:

return this.authHttp.post(this.wpApiURL + '/users-reviews/reviews', params, { headers: headers }) 

URLSearchParams nesne olarak params'ı ayarlamayı unutmayın. let params = new URLSearchParams()

+0

Teşekkürler Suraj, gerçeği kaldırmak rağmen, sorun hala burada. – christophebazin

+0

Parametreleri URLSearchParams olarak ayarlayın ve gövde olarak gönderin –

+0

Denedim, önceki iletiye kodu gönderiyorum, ancak yeniden yükleme yüküm boş. – christophebazin

1

@Venkateswaran, gerçekten iyi bir şey:

let params = new URLSearchParams; 
    params.append('id', '5'); 
    params.append('user_id', '1'); 
    console.log('sending request'); 
    return this.authHttp.post(url, { search:params }) 
     .map(
      res => { 
       let newReview = res.json(); 
       this.reviews.push(newReview); 
       console.log(this.reviews); 
       return newReview; 
      } 
     ) 
     .subscribe(
       data => { 
        this.statusMessage = "Review added successfully!"; 
        //clear form 
        form.reset(); 
       }, 
       error => { 
        console.log(error._body); 
        this.statusMessage = error._body; 
       } 
    ); 
} 

Ve istek paylod boş:

{ 
    "search": { 
    "rawParams": "", 
    "queryEncoder": {}, 
    "paramsMap": {} 
    } 
}