Javascript - 来自服务器/后端的POST请求不起作用

时间:2018-02-26 14:12:27

标签: javascript node.js ajax post request

我正在使用API​​进行文本翻译(您可以在此处找到它:Yandex)。

以下代码位于前端并且工作正常:

var url = "https://translate.yandex.net/api/v1.5/tr.json/translate",
    keyAPI = "myKey/hidden";
var xhr = new XMLHttpRequest(),
    textAPI = "fa asta sa fie in engleza";
langAPI = "en";
data = "key="+keyAPI+"&text="+textAPI+"&lang="+langAPI;

xhr.open("POST",url,true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send(data);
xhr.onreadystatechange = function() {
    if (this.readyState === 4 && this.status === 200) {
        var res = this.responseText;
        var json = JSON.parse(res);
        if (json.code === 200) {
            console.log( json.text[0]);
        }
        else {
            console.log("Error Code: " + json.code);
        }
    }
};

浏览器中的控制台输出:

  

这样做是英文

所以没关系。

但是,我需要在后端执行此操作。所以,我知道 XMLHttpRequest 是内置浏览器,但不在节​​点中,因此我使用以下命令安装它:npm install xmlhttprequest我尝试使用与前端使用的代码相同的代码,但我在 xhr.onreadystatechange 上添加了一个日志,告诉我状态:

 xhr.onreadystatechange = function() {
    console.log(this.status);
    if (this.readyState === 4 && this.status === 200) {
       var res = this.responseText;
       var json = JSON.parse(res);
       if (json.code === 200) {
             console.log( json.text[0]);
       }
       else {
             console.log("Error Code: " + json.code);
       }
    }
    };

我得到的是:

  

0

  

415

作为状态。

所以它没有用。我决定改用请求:

var url = "https://translate.yandex.net/api/v1.5/tr.json/translate";
var keyAPI = "hidden;
var xhr = new XMLHttpRequest();
var textAPI = "fa asta sa fie in engleza";
var langAPI = "en";

request.post({
       url: url,
       body: JSON.stringify({
          key : keyAPI,
          text: "tradu",
          lang : langAPI
       }),
       json: true
       }, function(err, response, body) {
               if(err) {
                   console.log(err);
                   return;
               }
               console.log(body);
       });

我得到的输出是:

  

{code:415,message:'不支持的媒体类型' }

再说一遍,它不起作用。我也尝试在帖子请求中添加标题,如下所示:

headers: {
     'Accept': 'application/json',
     'Content-Type': 'application/json'
}

但它没有任何区别。

我做了一些挖掘,发现状态 415 意味着不支持的媒体类型,我也阅读了一些关于此的帖子/修复但没有人帮助过我。

1 个答案:

答案 0 :(得分:3)

要使其正常工作,请使用form键发送数据(使用请求)

var url = "https://translate.yandex.net/api/v1.5/tr.json/translate";
var keyAPI = "hidden";
var textAPI = "fa asta sa fie in engleza";
var langAPI = "en";

request.post({
   url: url,
   form: {
     text: textAPI,
     key: keyAPI,
     lang: langAPI
   },
   }, function(err, response, body) {
           if(err) {
               console.log(err);
               return;
           }
           console.log(body);
   });