一个后端给前端的接口文档的接口函数可以在js文件里两次调用吗

java想调用前台js文件里的方法_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
java想调用前台js文件里的方法
我用了脚本引擎方法在后台java里调用前台js文件中的方法,现在已经能调用到方法,方法部分如下
Invocable invEngine = (Invocable)
result = invEngine.invokeFunction(&getDateft&,&flag&);//js方法名称getDateft
但是貌似用这个方法读取js的时候不...
js是前台代码java是后台代码,通常来说是前台发送请求给后台,然后后台处理请求,响应并跳转,你用后台来调用前台js,不明白你的需要
采纳率:46%
&nbsp,允许用户直接执行js代码。&nbspJDK1.6版添加了新的ScriptEngine类;ScriptEngineManager&manager&&ScriptEngine&ScriptEngineManager();=&new&engine&nbsp
Java是后台运行的,你需要把前台的js文件读入后台才能执行,比如通过engine.eval(new FileReader(jsfile));这样的语句才能执行 ,而且执行的结果只在后台,和前台没关系。
我做了个demo能正常执行
哦,刚才没看清问题,不好意思。错误提示:javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: &document& is not defined. (&Unknown source&#9) in &Unknown source& at line number 9你这个错误肯定报,因为java只是能够执行js脚本,但docment是浏览器的API对象,jdk里没有浏览器api,肯定不能执行。
那如何解决?js里肯定要用到浏览器的api阿
java没有内建浏览器api啊,因为是两个不同的厂商啊。要么你想办法把浏览器的document对象内建到java的ScriptEngine中(这个太难了吧),要么换种思路实现你的功能,只要不是技术问题,就没有实现不了的功能。
为您推荐:
其他类似问题
java的相关知识
等待您来回答一个后端给的接口函数可以在js文件里两次调用吗_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
一个后端给的接口函数可以在js文件里两次调用吗
我有更好的答案
如果你的接口函数没有限制,调用多少次都没问题。
可以的,只要作用域允许的话,调用几次都可以的。
为您推荐:
其他类似问题
等待您来回答2176人阅读
在实际的Web开发中,我们可能会常常遇到后台调用前台JS代码或者前台JS调用后台代码的情况。今天就把比较实用的前后台相互调用的方法总结出来和大家分享。
&1&后台代码调用前台JS代码
一、说到后台代码调用前台的JS代码很多人首先就会想到使用ClientScript对象。
ClientScript.RegisterStartupScript()方法,该方法主要是注册启动脚本文本,即在后台执行调用前台JS代码
该方法有两个重载,
1、ClientScript.RegisterStartupScript(Type
type,string key ,string script)注册启动脚本//分别表示:1、要注册的启动脚本的类型(一般直接填this.GetType()即可),2、要注册的启动脚本的键(相当于为执行脚本起一个名字,任意名即可),3、要注册的启动脚本文本(一般为”&script&函数()&/script&”);
ClientScript.RegisterStartupScript(this.GetType(),”SayHello”,”&script&SayHello(‘”+name+”’)&/script&”);//先获取用户姓名,然后再调用前台的JS函数SayHello(name);
2、ClientScript.RegisterStartupScript(Typetype,string key, string script,bool flag);//该函数和第一参数的区别在于将最后一个参数设为“ture”时,第三个参数可以直接写被调用的函数,不用再加“&script&&/script&”,这两个方法差别不是很大。
ClientScript.RegisterStartupScript(this.GetType(),”SayHello1”, “SayHello(‘” + name + “’)”, true);//跟第一方法的效果一样,调用前台SayHello(name)函数,如果最后一个值设为false,则仍需添加上“&script&&/script&”标记
这里需要特别注意的是在注册启动脚本的时候,键是唯一的,不能重复,如果有将会报错。
二、使用ClientScript.RegisterClientScriptBlock()方法,注册客户端脚本块
该方法有两个重载,使用方法几乎和ClientScript.RegisterClientScriptBlock()的两个方法一模一样。这里只是给出示例,就不再做过多的解释。
&ClientScript.RegisterClientScriptBlock(this.GetType(),”SayHello2”, “ShowPerson(‘” + age + “’)”,true);&&&&&&&&ClientScript.RegisterClientScriptBlock(this.GetType(),”SayHello2”,”&script&SayHello(‘”+name+”’)&/script&”);
在这里主要讲一下RegisterClientScriptBlock方法和RegisterStartupScript方法和区别
RegisterStartupScript,这种方法会把JS代码嵌入在页面的底部、表单的最后
(&/form&前面),适用于要在页面控件加载完成后运行的JS代码
RegisterClientScriptBlock,这种方法会把JS代码嵌入在页面的顶部、表单的最前
(&form&后面),适用于要在控件加载前执行的JS代码
通过html源代码可见。
三、使用Control.Attribute属性(服务器控件)
这也是一种比较简单好用的方法,可以将该方法和控件的客户端方法相关联,比如“onblur,onfocus,onmousemove,onmouseover“等,在这里只是把该方法作为Control的一个属性来用。
在Page_Load()方法里添加如下代码:
&&txtname.Attributes[“onblur”] =”show(‘” + txt.Text + “’)”;//当用户离开文本框时,会提示所输入的内容
(在Page_Load使用该方法,其实是在编译成源文件时在对应的html元素的属性调用js函数,如&inputtype=”text” onblur=”show()”/&)
还可以通过这种方法来控制前台的显示。其实现方法和本例的方法都是一样的,在这里就不做过多的介绍了。
四、可以使用Control的一个属性,(服务器控件),OnClientClick
为该属性赋值OnClientClick=”SayHello()”;则就会调用客户端的方法,该方法的本质就是一个客户端的方法。(该属性只有服务器控件具有,在编译成源文件时,其实是转换成对应的事件,如OnClientClick会转换成onclick)
&&&&&&&&asp:Button ID=”Button1” runat=”server”OnClientClick=”Get()” Text=”OnClientClick方法测试“/&
& & & & &&
&2&前台JS调用后台的方法
一、最简单的一种方式,在前台的JS函数中写下如下代码:
Var name=&%=SayHello()%&
以前的ASP就是通过这样的方式将cs代码写到apsx页的,在&%
%&中就可以写cs代码了,效果跟在cs页写一样。
在前台页面&head&&head&节点中添加如下代码:
&script type=”text/javascript&
function Get() {
&&&&&&var hello=”&%=SayHello() %&”;
&&&&&&alert(hello);
&&&&/script&
后台cs页代码如下:
&&&&&&public string SayHello()
&&&&&&&&&&&return ” Javascript调用后台代码显示姓名:
二、通过辅助按钮实现前台JS调用后台代码(这样相当于添加多了一个按钮)
1、先在前台添加一个服务器端按钮,双击,进入后台.cs页,写下将要执行的代码
protected void Button4_Click(object sender,EventArgs e)&&&&&& {
&&&&&&&&&//在此方法里写下要执行的代码,此处为简单的示例&&
&&&&&&&&&&&Response.Write(“&script&alert(‘O(∩_∩)O哈哈~你好!‘)&/script&”);
2、将该按钮的Width属性设为0,将Height属性设为0,形如
&&asp:Button ID=”btnhoutai” runat=”server”Text=””
Width=”0”Height=”0”
&&&&&&&&&&& onclick=”Button4_Click”&/&
3、在前台添加一个JS函数,如下:
&function Show1() {
&&&&&&&&&&&document.getElementById(“btnhoutai”).click();
4、添加html按钮并将其onclick=”Show1()”;
&input id=”btnjs”type=”button” value=”Js
调用后台C#函数”
onclick=”Show1()”/&
经过以上这四步就可以实现JS调用后台的代码了。
*本文转自:/Olive116/archive//2725798.html
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:22898次
排名:千里之外
原创:20篇
(3)(1)(1)(7)(4)(1)(3)(2)(5)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'JavaScript高级之函数的四种调用形式
分析函数的四种调用形式
弄清楚函数中this的意义
明确构造函对象的过程
学会使用上下文调用函数
  了解函数的调用过程有助于深入学习与分析Script代码. 本文是高级这 个系列中的第三篇文章,主要介绍JavaScript中函数的四种使用形式.&
  在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或 其他描述性语言那样仅仅作为一个模块来使用. 函数有四种调用模式,分别是:函数调用形
式、方法调用形式、构造器形式、以及apply形式. 这里所有的调用模式中,最主要的区别在
于关键字 this 的意义. 下面分别介绍这个几种调用形式.
一、函数调用形式
函数调用形式是最常见的形式,也是最好理解的形式. 所谓函数形式就是一般声明函数 后直接调用即是. 例如:
1 // 声明一个函数,并调用
2 function func() {
3 & & alert(&Hello World&);
1 // 使用函数的Lambda表达式定义函数,然后调用
2 var func = function() {
3 & & alert(&你好,传智播客&);
这两段代码都会在中弹出一个对话框,显示字符串中的文字. 这个就是函数调用.
  可以发现函数调用很简单,就是平时学习的一样. 这里的关键是,在函数调用模式中, 函数里的 this 关键字指全局对象,如果在浏览器中就是 window 对象. 例如:
1 var func = function() {
2 & & alert(this);
此时,会弹出对话框,打印出 [object Window]
二、方法调用模式
  函数调用模式很简单,是最基本的调用方式. 但是同样的是函数,将其赋值给一个对 象的成员以后,就不一样了. 将函数赋值给对象的成员后,那么这个就不在称为函数,而
应该叫做方法. 例如:
1 // 定义一个函数
2 var func = function() {
3 & & alert(&我是一个函数么?&);
5 // 将其赋值给一个对象
6 var o = {};
7 o.fn = // 注意这里不要加圆括号
此时,o.fn 则是方法,不是函数了. 实际上 fn 的方法体与 func 是一模一样的,但是这
里有个微妙的不同. 看下面的代码:
1 // 接上面的代码
2 alert(o.fn === func);
打印结果是 true ,这个表明两个函数是一样的东西. 但是修改一下函数的代码:
&1 // 修改函数体
&2 var func = function() {
&3 & & alert(this);
&5 var o = {};
&7 // 比较
&8 alert(o.fn === func);
&9 // 调用
10 func();
11 o.fn();
  这里的运行结果是,两个函数是相同的,因此打印结果是 true. 但是由于两个函数的调用
是不一样的,func 的调用,打印的是 [object Window],而 o.fn 的打印结果是 [object Object].
  这里便是函数调用与方法调用的区别. 函数调用中,this 专指全局对象 window,而 在方法中 this 专指当前对象. 即 o.fn 中的 this 指的就是对象 o.
三、构造器调用模式
  同样是函数,在单纯的函数模式下,this 表示 window;在对象方法模式下,this 指 的是当前对象. 除了这两种情况,JavaScript 中函数还可以是构造器. 将函数作为构造器
来使用的语法就是在函数调用前面加上一个 new 关键字. 如代码:
&1 // 定义一个构造函数
&2 var Person = function() {
&3 & & this.name = &传智播客&;
&4 & & this.sayHello = function() {
&5 & & & & alert(&你好,这里是& + this.name);
&8 // 调用构造器,创建对象
&9 var p = new Person();
10 // 使用对象
11 p.sayHello();
  上面的案例首先创建一个构造函数Person,然后使用构造函数创建对象p. 这里使用 new 语法. 然后在使用对象调用sayHello()方法. 这个使用构造函数创建对象的案例比较简单.&
从案例可以看到,此时 this 指的是对象本身.&
  除了上面简单的使用以外,函数作为构造器还有几个变化. 分别为:
   1、 所有需要由对象使用的属性,必须使用 this 引导;
   2、 函数的 return 语句意义被改写,如果返回非对象,就返回
3.1 构造器中的 this
  我们需要分析创建对象的过程,方能知道 this 的意义. 如下面代码:
1 var Person = function() {
2 & & this.name = &传智播客&;
4 var p = new Person();
这里首先定义了函数 Person,下面分析一下整个执行:
  1、 程序在执行到这一句的时候,不会执行函数体,因此 JavaScript 的解释器并不知道这个
    函数的内容.
  2、 接下来执行 new 关键字,创建对象,解释器开辟内存,得到对象的引用,将新对象的引
    用交给函数.&
  3、 紧接着执行函数,将传过来的对象引用交给 this. 也就是说,在构造方法中,this 就是
    刚刚被 new 创建出来的对象.
  4、 然后为 this 添加成员,也就是为对象添加成员.&
  5、 最后函数结束,返回 this,将 this 交给左边的变量.
  分析过构造函数的执行以后,可以得到,构造函数中的 this 就是当前对象.
3.2 构造器中的 return
  在构造函数中 return 的意义发生了变化,首先如果在构造函数中,如果返回的是一个对 象,那么就保留原意. 如果返回的是非对象,比如数字、布尔和字符串,那么就返回 this,如
果没有 return 语句,那么也返回 this. 看下面代码:
&1 // 返回一个对象的 return
&2 var ctr = function() {
&3 & & this.name = &赵晓虎&;
&4 & & return {
&5 & & & & name:&牛亮亮&
&8 // 创建对象
&9 var p = new ctr();
10 // 访问name属性
11 alert(p.name);
执行代码,这里打印的结果是&牛亮亮&. 因为构造方法中返回的是一个对象,那么保留 return
的意义,返回内容为 return 后面的对象. 再看下面代码:
&1 // 定义返回非对象数据的构造器
&2 var ctr = function() {
&3 & & this.name = &赵晓虎&;
&4 & & return &牛亮亮&;
&6 // 创建对象
&7 var p = new ctr();
&8 // 使用
&9 alert(p);
10 alert(p.name);
代码运行结果是,先弹窗打印[object Object],然后打印&赵晓虎&. 因为这里 return 的是一个
字符串,属于基本类型,那么这里的 return 语句无效,返回的是 this 对象. 因此第一个打印的 是[object Object]而第二个不会打印 undefined.
四、apply调用模式
  除了上述三种调用模式以外,函数作为对象还有 apply 方法与 call 方法可以使用,这便是 第四种调用模式,我称其为 apply 模式.&
  首先介绍 apply 模式,首先这里 apply 模式既可以像函数一样使用,也可以像方法一样使用 可以说是一个灵活的使用方法. 首先看看语法:&
  函数名.apply(对象, 参数数组);
这里看语法比较晦涩,还是使用案例来说明:
  1、 新建两个 js 文件,分别为&js1.js&与&js2.js&;
  2、 添加代码
&1 // js1.js 文件中
&2 var func1 = function() {
&3 & & this.name = &传智播客&;
&5 func1.apply(null);
&6 alert(name);
&8 // js2.js 文件
&9 var func2 = function() {
10 & & this.name = &传值播客&;
12 var o = {};
13 func2.apply(o);
14 alert(o.name);
  3、 分别运行着两段代码,可以发现第一个文件中的 name 属性已经加载到全局对象 window 中;
    而第二个文件中的 name 属性是在传入的对象 o 中. 即第一个相当于函数调用,第二个相当
    于方法调用.
   这里的参数是方法本身所带的参数,但是需要用数组的形式存储在. 比如代码:
1 // 一个数组的例子
2 var arr1 = [1,2,3,[4,5],[6,7,8]];
3 // 将其展开
4 var arr2 = arr1.conact.apply([], arr1);
  然后介绍一下 call 模式. call 模式与 apply 模式最大的不同在于 call 中的参数不用数组. 看下面代码就清楚了:
&1 // 定义方法
&2 var func = function(name, age, sex) {
&3 & & this.name =
&4 & & this.age =
&5 & & this.sex =
&7 // 创建对象
&8 var o = {};
&9 // 给对象添加成员
10 // apply 模式
11 var p1 = func.apply(o, [&赵晓虎&, 19, &男&]);
12 // call 模式
13 var p2 = func.call(o, &赵晓虎&, 19, &男&);
上面的代码,apply 模式与 call 模式的结果是一样的.
  实际上,使用 apply 模式和 call 模式,可以任意的操作控制 this 的意义,在函数 js 的设 计模式中使用广泛. 简单小结一下,js 中的函数调用有四种模式,分别是:函数式、方法式、构造
器式和 apply 式. 而这些模式中,this 的含义分别为:在函数中 this 是全局对象 window,在方
法中 this 指当前对象,在构造函数中 this 是被创建的对象,在 apply 模式中 this 可以随意的
指定. 在 apply 模式中如果使用 null,就是函数模式,如果使用对象,就是方法模式.
五、案例   
  下面通过一个案例结束本篇吧. 案例说明:有一个p,id为dv,鼠标移到上面去高度增大2倍,鼠标离开恢复. 下面直接上js代码
&1 var dv = document.getElementById(&dv&);
&2 var height = parseInt(dv.style.height || dv.offsetHeight);
&3 var intervalId;
&4 dv.onmouver = function() {
&5 & & // 停止已经在执行的动画
&6 & & clearInterval(intervalId);
&7 & & // 得到目标高度
&8 & & var toHeight = height * 2;
&9 & & // 获得当前对象
10 & & var that =
11 & & // 开器计时器,缓慢变化
12 & & intervalId = setInterval(function() {
13 & & & & // 得到现在的高度
14 & & & & var height = parseInt(dv.style.height || dv.offsetHeight);
15 & & & & // 记录每次需要变化的步长
16 & & & & var h = Math.ceil(Math.abs(height - toHeight) / 10);
17 & & & & // 判断变化,如果步长为0就停止计时器
18 & & & & if( h & 0 ) {
19 & & & & & & // 这里为什么要用that呢?思考一下吧
20 & & & & & & that.style.height = (height + h) + &px&;
21 & & & & } else {
22 & & & & & & clearInterval(intervalId);
23 & & & & }
24 & & }, 20);
26 dv.onmouseout = function() {
27 & & // 原理和之前一样
28 & & clearInterval(intervalId);
29 & & var toHeight =
30 & & var that =
31 & & intervalId = setInterval(function() {
32 & & & & var height = parseInt(dv.style.height || dv.offsetHeight);
33 & & & & var h = Math.ceil(Math.abs(height - toHeight) / 10);
34 & & & & if( h & 0 ) {
35 & & & & & & that.style.height = (height - h) + &px&;
36 & & & & } else {
37 & & & & & & clearInterval(intervalId);
38 & & & & }
39 & & }, 20);问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
对于前后端完全分离的网站,后端采用PHP/Java/Python向前端输出json格式的数据,而前端通过ajax向后端调用接口获取数据。这种情况下,后端的接口如果没有采取一定的保护措施是很容易被其他人恶意调用来做一些非法操作。那么,现在在这种前后端完全分离的网站架构下有哪些主流的对后端接口保护的做法?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
1)给你API的用户发放验证Key,对请求的数据内容按双方定义的规则结合Key进行编码,后端拿到请求后解码校验是否符合预期,并设置每个Key的访问频率~~内容不符合预期直接拒绝响应访问过于频繁,那么此用户在一定时间内不允许访问~~~
2)还可以发放SSH私钥/公钥的方式来保证~~~
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
用Access-Control-Allow-Origin header 和 csrf的token来控制。有的需要限制次数的还会在headers中加入X-RateLimit-Limit和X-RateLimit-Remaining来控制访问
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
目前我的想法更多是限制操作频度来控制,因为无论你怎么做,会Chrome插件开发的脚本小王子总能利用你的用户体验需求绕过所有限制。
同时也建议你开放出去的api权限控制好,比如
不要将这个api设计为随意更换id就能查询到所有用户的信息,要在filter中对传入的id和session中维护的登录用户信息做鉴权校验。
如果这个页面被设计为不需要用户登录即可查看的偏静态页面,那我会推荐你不要用方案来实现这种页面。因为很难去做SEQ和CDN化
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
给你一个简单的方案:判断请求来源是不是ajax,如果不是,则拒绝请求。那么来自ajax的请求,可以进行计数,如果单位时间请求过于频繁的话,禁止请求(这样会武断的屏蔽掉一个IP后面有一家大公司的情况)。
如果是ajax的话,你根本不能判断对方是不是恶意请求,因为它很有可能真的来源于你自己的页面。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
做个token验证。在前端要调用后端接口的时候,传个加密过的token过来就行啦
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
一般就是token,还有就是来源。。。这就杀了一片了。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
做好后端验证是最重要的。传递的数据可以用js加个密,能略微增加一些抓包的难度
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
http协议的无状态特性决定了是无法彻底避免第三方调用你的后台服务。前面几位说的方法都有一定的作用,包括crsf、接口调用频率、用户行为分析等从某一些方面来说都是只能增加第三方调用的难度而已。
12306网站就是最好的实例。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
登录数据可以用session,如果不需要登录的,可以用参数密钥时间认证。
test.php?a=1&b=2&time=&code=xxxx
xxxx就是认证码,简单点可以用md5(a1b2timepasswd),即参数列表,加上当前时间,加上密码。你可以使用多个密码,即一个客户端一个密码,每个客户端发一个appid,即增加一个参数,
`test.php?appid=1&a=1&b=2&time=&code=xxxx`,
这样可以随时修改一个客户端的密码,或者丢弃某个客户端请求。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
非法访问通常使用认证来解决,方法很多session,oauth等等。对于合法的认证访问通常需要进行访问频率和次数的限制,各种API框架都有支持,比如Django restframework的throttling。对于拒绝服务时的访问,通常需要在更前端做控制,比如在nginx上配置rate limit。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
参照各大开放接口,做一个token验证,每次发起请求必须带验证。就不会被随意调用了。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
HTTP请求支持鉴权,用base auth 做访问身份验证.或者用oauth2对请求做认证.
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
最近我也在思考这个问题
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
试试Oauth验证
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
后端没有记录session,怎么获取数据?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
后来,我大致想了一下,一些不是非常敏感的数据,不需要登录就可以加载,如果是敏感的数据需要用户登录了之后才可以用异步调用。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
验证码,session,限制ip 这些都是可以做的…
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
所见即所得,没办法。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
lz 可以参考下微信js 的接口
该答案已被忽略,原因:宜作评论而非答案
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:}

我要回帖

更多关于 vue.js 前后端接口 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信