专栏首页Jerry的SAP技术分享利用XMLHttpRequest 通过HTTP POST向ABAP backend发送数据

利用XMLHttpRequest 通过HTTP POST向ABAP backend发送数据

Created by Jerry Wang, last modified on Aug 19, 2014

Javascript source code:

<html>
<head>
<script type="text/javascript">
var xmlhttp;
function GetXmlHttpObject()
{
    if (window.XMLHttpRequest) {
       return new XMLHttpRequest();
    }
    if (window.ActiveXObject) {
       return new ActiveXObject("Microsoft.XMLHTTP");
    }
    return null;
}
function stateChanged()
{
   if (xmlhttp.readyState == 4) {
       document.getElementById("result").innerHTML = xmlhttp.responseText;
       document.getElementById("result").style.border = "1px solid #A5ACB2";
  }
}
function getRequestURL(str)
{
    var url = <use your own url here>+ str;
    url = url + "&sid=" + Math.random();
    return url;
}
function showResult(str)
{
if (str.length == 0 ) {
  document.getElementById("result").innerHTML = "";
  document.getElementById("result").style.border = "0px";
  return;
}
xmlhttp = GetXmlHttpObject();
if (xmlhttp == null ){
  alert ("Your browser does not support XML HTTP Request");
  return;
  }
var requesturl = getRequestURL(str);
xmlhttp.onreadystatechange = stateChanged ;
if ("withCredentials" in xmlhttp) {
 console.log("Great!!!!!");
}
xmlhttp.open("POST",requesturl,true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
var data = [];
data.push( escape("firstname=Jerry 1"));
data.push( escape("lastname=Wang 2")); 
xmlhttp.send(data.join("&"));
}
</script>
</head>
<body>
<input type="text" id="fname" onkeyup="showResult(this.value)" />
<div id = "result" ></div>
</body>
</html>

设置Content-Type为form-urlencoded, 即需要通过http post发送到server端的数据通过name-value pair的形式加到post url中去。 在ABAP 端能够成功还原出发送的firstname和lastname的数据:

在Chrome里观察到的form data:

如果content type改成text/plain:

xmlhttp.setRequestHeader("Content-Type", "text/plain");
var data = [];
data.push( escape("firstname=Jerry 1"));
data.push( escape("lastname=Wang 2")); 
xmlhttp.send(data.join("\r\n"));

则发送的firstname和lastname将不会出现在form fields里:

此时firstname和lastname只能通过request->get_cdata() 来读取:

server->request->get_header_fields( CHANGING fields = lt_header ).
  server->request->get_form_fields( CHANGING fields = lt_form ).
  lv_data = server->request->get_cdata( ).
  SPLIT lv_data AT cl_abap_char_utilities=>cr_lf INTO TABLE lt_result.

Chrome里出现的位置从Form Data 改成了Request payload:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用SAP Cloud for Customer Product OData服务读取产品主数据和其图片信息

    我在系统里创建了一个product,id为I043416, 描述信息为Mini Cooper:

    Jerry Wang
  • 使用脚手架应用做单元测试

    因为后台service比较复杂,需要三个不同的实例协同工作,所以之前Oliver开发了Scaffolding App这个Angular前端,目的是方便我们随时测...

    Jerry Wang
  • 使用脚手架应用做单元测试

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    Jerry Wang
  • 【python分析】买彩票机选和守号哪个中奖概率高?

    作者:Powerxing 厦门大学计算机系13级研究生 很多人有买彩票,不过就是瞎买买。早之前是随机买过一注,然后一直买这个号,不过断过一段时间没买,后来就一...

    机器学习AI算法工程
  • matlab | 离散傅里叶变换一阶、二阶

    把时域转换到频域,能够为图像处理带来很多便捷的操作。在频谱图中直接去掉低频部分或者高频部分都会发生很多有趣的事情。

    Rare0716
  • OpenStack(企业私有云)万里长征第三步——调试成功

    一、前言 折腾了一两个月(中间有事耽搁了半个月),至今日基本调试成功OpenStack,现将中间的部分心得记录下来。 二、环境 使用的是devstack new...

    魏守峰
  • 【云+社区年度征文】5分钟让你知道什么是搜索引擎

    我们先通过通过官方的解释来理解一下什么是搜索引擎.当然了我们之后会通过更加通俗的方式来详细讲解搜索引擎的概念.

    萌萌哒的瓤瓤
  • 【Rust日报】 2019-05-26:切片索引检查导致的3倍性能下降问题一例

    Tox 原来是个C项目,作者用Rust通过审视发现,实现里面有不少漏洞,易被攻击。所以他用Rust重写了它。就是上面那个项目地址。现在作者,开始整理这几年的工作...

    MikeLoveRust
  • git命令行(3)之远程版本库

    裸版本库就是不含有工作区的版本库,而我们平常开发的代码库都是开发版本库,修改工作区,然后进行提交、推送提交等操作。 可以使用git init --bare命令创...

    py3study
  • 加密 util 笔记

    solate

扫码关注云+社区

领取腾讯云代金券