Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery angular2 post错误参数_Jquery_Ajax_Angular - Fatal编程技术网

Jquery angular2 post错误参数

Jquery angular2 post错误参数,jquery,ajax,angular,Jquery,Ajax,Angular,我正在开发一个与Yandex Translate API通信的Angular2应用程序 当我使用http发送POST请求时,我遇到了一个问题,但它可以使用jQuery.ajax 我的代码: var url = "https://translate.yandex.net/api/v1.5/tr.json/translate"; var key = "API_KEY"; var fromTo = this.from + '-' + this.to; var data =

我正在开发一个与Yandex Translate API通信的Angular2应用程序

当我使用http发送POST请求时,我遇到了一个问题,但它可以使用jQuery.ajax

我的代码:

var url = "https://translate.yandex.net/api/v1.5/tr.json/translate";
    var key = "API_KEY";

    var fromTo = this.from + '-' + this.to;

    var data = {
        text: this.typedText,
        key : key,
        lang: fromTo
    };
使用jQuery:

    $.ajax({
        type: "POST",
        url: url,
        data: data,
        success: $.proxy(function (data) {
            this.result = data.text;
        }, this),
        error: $.proxy(function () {
            Materialize.toast('One language is not supported by Yandex.', 3000)
        }, this),
    });
使用angular2 http.post:

    this.http.post(url, JSON.stringify(data))
        .map(res => res.text())
        .subscribe(
            data  => this.result = data.text,
            error => this.displayError('One language is not supported by Yandex.')
        );
jQuery和http响应之间存在差异的屏幕截图:

谢谢你的帮助

更新1:更改标题

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

    this.http.post(url, JSON.stringify(data), {
            headers :headers
    })
    .map(res => res.text())
    .subscribe(
        data  => this.result = data.text,
        error => this.displayError('One language is not supported by Yandex.')
    );

在jQuery中,有效负载使用url编码数据,Angular2使用JSON

您需要手动创建负载,而不是使用stringify方法。诸如此类:

let headers = new Headers();
headers.append('Content-type ', 'x-www-form-urlencoded');

http.post('http://...', 'key=something&text=value&lang=en',
    { headers: headers });
希望它能帮助你,
Thierry

可能我试图更改标题,但仍然有相同的错误(sse我的更新)。谢谢,它与您的示例一起工作。有一种方法可以在字符串中转换我的数据对象,比如“key=something&other=value”?您还需要更新有效负载的结构。。。我更新了m'y的答案;-)也许您可以查看请求选项的搜索属性:。我知道你可以在以后的参数?在url中。但我不知道它是否设置在我需要测试的post请求的情况下的正文中。。。