【问题标题】:Java json object call function by nameJava json对象按名称调用函数
【发布时间】:2013-01-19 14:59:16
【问题描述】:

我想知道是否可以从 java json 对象调用函数?

例子

java:

JSONObject json = new JSONObject();
json.put("fnRowCallback", "test()");

jquery:

$ (function () {
    "use strict";
    function test() {
        alert('test');
    }
}(jQuery)); 

需要终极成就。

JSONObject json = new JSONObject();
json.put("fnRowCallback", function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
                if (aData["rush"] == "Rush" ) {
                    $(nRow).addClass("gradeX");  
                }
            });

【问题讨论】:

  • 你想要完成什么?您的基本目标是什么?
  • 您的 JSON 代码在服务器上。您正在尝试在客户端上调用 jQuery 函数 test()。实现的可能性如何?
  • 我是 Tapestry5 用户,我正在尝试使用 jquery 数据表。该组件使用 java json 对象进行初始化。我面临的问题是尝试添加此配置 json.put("fnRowCallback", "function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {alert('test'); ");但是json对象不接受函数,所以我希望能够调用函数。
  • @Lion,tapestry5 将json对象输出到客户端
  • JSON 不能强迫任何事情发生。 JSON 只是一个字符串 - 发生的事情由接收者定义 - 接收者不应该执行不受信任的任意代码。

标签: java jquery json


【解决方案1】:

如果您让 Java 返回 javascript,则可以完成此操作。

<script src="myjavapage.jsp"></script>

让你的 Java 返回

$(function(){
    alert('test');
});

但是我想不出一个很好的理由来这样编码,而不是使用一个 js 文件来使用 ajax 按需获取内容,而不是在你的 json 中包含代码。这似乎毫无意义。

【讨论】:

  • 也许我做错了。我正在使用以下示例 tapestry5-jquery.com/docs/components/docsdatatables tab 2 line 60。我正在尝试合并此示例 datatables.net/usage/callbacks "fnRowCallback"
  • that("fnRowCallback") 与 json 对象有什么关系?
  • fnRowCallback 将是我在我的 json 对象中的关键。如果您查看我发布的第一个链接,您会注意到该组件在服务器端配置了一个 json 对象,但在数据表的示例中,他们直接在 javascript 中配置它,这对我来说似乎不是一个选项.我的对将是函数,我不确定如何将该函数作为对传递,因为 json 对象只不过是字符串。
  • 如何从json字符串中获取到dataTable插件?
  • 实际上 Tapestry 组件将 json 对象作为参数传递到数据表中,但问题是函数是作为字符串而不是可执行函数传入的。我想也许我可以将一个函数名传递给 json 对象并使用它来调用该函数。老实说,我不知道如何处理。
【解决方案2】:

Function.prototype.callFunction.prototype.apply

var obj = {
   foo: function() {
    console.log('foo called');
   }
};

var json = {method: "foo"};

obj[json.method].call(this);

【讨论】:

    【解决方案3】:

    我最终回答了我自己的问题。解决方案是像这样使用 JSONLiteral,

    Java

    public JSONObject getOptions() {
        JSONObject json = new JSONObject();
        json.put("fnRowCallback", new JSONLiteral(String.format("fnRowCallback()")));
        return json;
    }
    

    JS.

    function fnRowCallback(){
        var fnRowCallback = function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
            if (aData["rush"] == "Rush" ) {
                nRow.className = nRow.className + " gradeX";  
            }
        };
        return fnRowCallback;
    }
    

    谢谢大家。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2019-09-22
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多