代码之家  ›  专栏  ›  技术社区  ›  efirvida

使用angular 4发送表单数据

  •  1
  • efirvida  · 技术社区  · 7 年前

    嗨,我正在构建一个WordPress主题,我需要在上面使用contact form 7插件,但我想不出将表单数据发送到插件的正确方法。

    这是我的邮政服务:

    import {
      Injectable
    } from '@angular/core';
    
    import {
      HttpClient,
      HttpHeaders
    } from '@angular/common/http';
    
    @Injectable()
    export class FormsService {
      constructor(private http: HttpClient) {}
    
      postForm(url, form) {
        return this.http.post(url, form, {
          headers: new HttpHeaders().set('Content-Type', 'multipart/form-data'),
        })
      }
    }
    

    以及使用该服务的组件部分:

    onSubmit() {
        const fd = new FormData();
        fd.append('your-name', this.name);
        fd.append('your-email', this.email);
        fd.append('your-message', this.message);
        fd.append('your-subject', this.sumbject);
    
        const url = `/wp-json/contact-form-7/v1/contact-forms/${this.form_id}/feedback`;
    
        this.sendMsg.postForm(url, fd).subscribe(
          data => {
            console.log(data);
          },
          err => console.log({
            error: err
          })
        )
    
        this.submitted = true;
      }
    

    此时,服务器响应消息已提交,但当我转到WP admin页面时,字段的non获取值。

    但是,如果我使用这个url和参数的邮递员的形式都工作,因为我想要的。

    我还找到了另一个可行的解决方案,但它不是我想要的角度方式。

    解决方案

     onSubmit() {
        const url = `/wp-json/contact-form-7/v1/contact-forms/${this.form_id}/feedback`;
        this.submitted = true;
      }
    
     sendData(url) {
        let XHR = new XMLHttpRequest();
        const FD = new FormData();
        FD.append('your-name', this.name);
        FD.append('your-email', this.email);
        FD.append('your-message', this.message);
        FD.append('your-subject', this.subject);
    
    
        // Define what happens on successful data submission
        XHR.addEventListener('load', function(event) {
          alert('Yeah! Data sent and response loaded.');
        });
    
        // Define what happens in case of error
        XHR.addEventListener('error', function(event) {
          alert('Oups! Something went wrong.');
        });
    
        // Set up our request
        XHR.open('POST', url);
    
        // Send our FormData object; HTTP headers are set automatically
        XHR.send(FD);
      }
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   efirvida    7 年前

    我找到了解决方案,问题出在我服务的标题定义上,正确的方法是:

    postForm(url, body) {
      var headers = new HttpHeaders();
      headers.append('Content-Type', 'application/form-data');
      return this.http.post(url, body, {headers: headers })
    }