【问题标题】:How to pass a function in an ajax call from JQuery to a Node.JS server如何将 ajax 调用中的函数从 JQuery 传递到 Node.JS 服务器
【发布时间】:2019-03-18 11:46:41
【问题描述】:

这是我的代码

let url = "/blabla";
let ajax_options = {
    data:{
        params_list:{
            sortFunction: (x, y) => parseFloat(x) - parseFloat(y);
        }
    }
};
$.ajax(url,ajax_options).then((res) => {
    //do something
});

但是当我检查浏览器尝试加载的实际 GET url 时,我得到:

http://localhost/blabla?params_list[sortFunction]=NaN

我应该如何编写代码以使其正确传递函数定义?

【问题讨论】:

  • 既然发送的所有数据都是字符串,只需将函数用引号括起来吗?或者您是否尝试发送调用函数的结果?
  • 试图发送函数的定义。理想情况下,即使是我在代码中其他地方定义并按名称传递的函数
  • 使用 POST 并首先尝试对其进行字符串化

标签: javascript jquery node.js ajax


【解决方案1】:

将函数引用保存到变量并在 $.ajax 内部解析之前使用 Function#toString()

const fn = (x, y) => parseFloat(x) - parseFloat(y),
      url = 'https://httpbin.org/get';

let ajax_options = { 
  data: {
    params_list: {
      sortFunction: fn.toString()
    }
  }
};

$.ajax(url, ajax_options).then(({args, url}) => {
  console.log('Response data ::', args);      
  console.log('URL used ::', url);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

注意也应该使用encodeURIComponent(),因为它是一个GET。如果以 POST 方式发送,则不需要

【讨论】:

  • 你不应该调用 encodeURIComponent. $.ajax` 自动这样做,所以你会得到双重编码。
  • @Barmar 我会这么认为,但请注意日志中的实际 url 中有空格。也许只是太晚了,我没有想清楚
  • 感谢答案。以及如何在另一端(即 nodejs 服务器)将其取回?那么再次从字符串到函数?
  • @chapo 没有简单的安全方法。您可以使用eval(),但这对于恶意输入也是非常危险的。如果您需要调用该实际功能服务器端,也许您应该重新考虑这一点。你到底想完成什么?
  • 是的,我最终在服务器上编写了函数并通过将其名称传递给参数来调用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多