简体   繁体   English

如何使用ScriptEngine从Java进行Ajax调用来调用javascript函数?

[英]How can I call javascript function, having ajax call from Java using ScriptEngine?

I am getting following exception: jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "$" is not defined 我收到以下异常:jdk.nashorn.internal.runtime.ECMAException:ReferenceError:未定义“ $”

But how can I have jquery available for the javascript function? 但是,如何使jQuery可用于javascript函数?

Following is my code: Java code: 以下是我的代码:Java代码:

@RequestMapping(value={"/callAjax"}, method={RequestMethod.POST, RequestMethod.GET})
    public String callAjax(HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
        logger.info("request came to /callAjax");

        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");
        InputStream fis = AjaxRequestController.class.getResourceAsStream("path to my js file");
        InputStreamReader fileReader = new InputStreamReader(fis);
        engine.eval(fileReader);
        Invocable inv = (Invocable) engine;
        inv.invokeFunction("ajaxMethod");
        return null;
    }

Javascript: 使用Javascript:

function ajaxMethod(){
    $.ajax({ 
        dataType: "json",
           type: "GET", 
           cache: false,
           url: 'myurl',
           success: function (data) {
            console.log(data);
        }
    });
}

In short, you can't! 简而言之,你不能!

Although nashorn (java 8's javascript engine) runs ECMAscript compliant javascript, but implicit objects from browsers like window , document are still not available. 尽管nashorn (Java 8的JavaScript引擎)运行与ECMAscript兼容的javascript,但是诸如windowdocument类的浏览器中的隐式对象仍然不可用。 JQuery or $ , attaches it to window object hence it will not work. jQuery或$ ,将其附加到window对象,因此它将不起作用。 Use other ways for making async http requests in java. 使用其他方式在Java中发出异步http请求。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM