javascript - 使用 promise 发送带有参数(数据)的 post 请求 - 纯 javascript

标签 javascript php promise es6-promise

如果我使用一个简单的 post xhr 请求,它可以发送 post 参数:

var http = new XMLHttpRequest();
var url = "example url";
var params = "limit=2";
http.open("post", url);
http.onreadystatechange = function() {
    if(http.readyState == 4 && http.status == 200) {
       alert(http.responseText);
    }
}
http.send(params);

但是如果我使用带有参数(数据)的 promise 那么我会得到 undefined index php 错误,带有 promise 我不能发送参数?或者我错过了什么……

  function postAjaxCall(url, data) {
  // return a new promise.
  return new Promise(function(resolve, reject) {
    // do the usual XHR stuff
    var req = new XMLHttpRequest();
    req.open('post', url);

    req.onload = function() {
      if (req.status == 200) {
      resolve(req.response);
      }
      else {
        reject(Error(req.statusText));
      }
    };

    // handle network errors
    req.onerror = function() {
      reject(Error("Network Error"));
    };

    // make the request
    req.send(data);
    //same thing if i hardcode like
    //req.send("limit=2");
  });
};

我提出要求

postAjaxCall('example url', "limit=2").then(
        function(response) {
          document.getElementById('example').innerHTML = response;
        },
        function(error) {
          console.error("Failed!", error);
        });

最佳答案

如果您在服务器端检查您的请求 header ,您将看到您的请求是以文本/纯文本格式发送的。要使 PHP 将请求视为 $_POST,您需要将请求 header 设置为“application/x-www-form-urlencoded”,它应该位于 xhr.open() 之后和 xhr.onload 之前。 https://developer.mozilla.org/en-US/docs/Web/Guide/AJAX/Getting_Started展示了基本的 Ajax 用法。

function postAjaxCall(url, data) { 
    // return a new promise. 
return new Promise(function(resolve, reject) { 
    // do the usual XHR stuff 
var req = new XMLHttpRequest();
req.open('post', url); 
//NOW WE TELL THE SERVER WHAT FORMAT OF POST REQUEST WE ARE MAKING 
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.onload = function() { 
    if (req.status == 200) { 
        resolve(req.response); 
    } else { 
        reject(Error(req.statusText)); 
        } 
    }; 
    // handle network errors 
req.onerror = function() { 
    reject(Error("Network Error")); 
}; // make the request 
req.send(data); 
    //same thing if i hardcode like //req.send("limit=2"); 
}); 
};

关于javascript - 使用 promise 发送带有参数(数据)的 post 请求 - 纯 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48424464/

相关文章:

javascript - 从 Base64 编码的 midi 进行 MidiConvert

php - 为什么在 Ubuntu 上上传 Wordpress 插件或主题时连接会重置

typescript - lib.es2015.promise.d.ts(33, 34) : An argument for 'value' was not provided

javascript - 将 Promise 转换为同步函数

javascript - 在年份的下拉列表中获取当前年份

javascript - 使用 Leaflet Control Search 获取并显示地址的经纬度

javascript - 单击 jquery/js 中的搜索按钮捕获搜索 url

php - PyroCMS 帮助文档

javascript - Bootstrap TabPanel 选项卡 - 禁用页面滚动到元素的 ID

node.js - Node v12.13.0 中未调用 fsPromises.writeFile 回调