【问题标题】:Problems passing data to jquery's getJSON() - Will not accept map将数据传递给 jquery 的 getJSON() 时出现问题 - 不接受地图
【发布时间】:2012-06-12 16:21:10
【问题描述】:

我正在尝试序列化我的表单 (JSP/Struts 1.1) 并将其放入对象或映射或任何 jQuery 的 .getJSON() 方法所需的内容中。这是我的js代码:

// This function makes an AJAX call, passing the entire form to the Action class
function ajaxCallWithForm(inputURL, formName, onReturnFunction)
{
    var formAsMap = serializeForm(formName);     
    $.getJSON(inputURL, formAsMap, onReturnFunction);
}

function serializeForm(formName)
{
    var obj = {};
    var a = $('#'+formName).serializeArray();

    $.each(a, function() {
        if (obj[this.name] !== undefined) {
            if (!obj[this.name].push) {
                obj[this.name] = [obj[this.name]];
            }
            obj[this.name].push(this.value || '');
        } else {
            obj[this.name] = this.value || '';
        }
    });

    return obj;
}

这会在后端产生一个java.lang.IllegalArgumentException(与 BeanUtils.populate servlet 方法有关)。

如果我将 .getJSON() 调用的 3 个参数中的第 2 个设置为这样的参数,它可以正常工作,并且数据会显示在我的 Java 后端的表单对象中:

// This function makes an AJAX call, passing the entire form to the Action class
function ajaxCallWithForm(inputURL, formName, onReturnFunction)
{
    $.getJSON(inputURL, {"vehicleKeyNum":12345,
                         "vehicleID":"12345",
                         "rand":Math.random()}, 
        onReturnFunction);
}

我还尝试使用正确的语法创建一个字符串,该字符串包含表单中的数据并产生相同的结果。我可能有我的语法错误。无论如何,我的主要问题是:

1) .getJSON() 方法接受“随请求发送到服务器的映射或字符串”。作为它的第二个参数(见http://api.jquery.com/jQuery.getJSON/

2) 我正在传递我认为是“地图”的东西

3) 我收到了java.lang.IllegalArgumentException,但不知道从这里去哪里

【问题讨论】:

  • 使用 Firebug 或其他一些工具来准确查看 HTTP 请求的样子,或者使用服务器端的日志工具来做到这一点。
  • 准确来说,用发布的 json 数据和解析相关的 java 服务器端代码更新问题。
  • 你试过在表单上使用jQuery“序列化”方法而不是对象吗?
  • 我在表单上使用了序列化方法而不是对象,是的。我实际上得到了同样的错误。我可以尝试开始使用 FirebugLite。在这里工作我们只使用IE。但是,如果还有其他方法可以解决这个问题,我也愿意接受这些想法。
  • 您的方法和.serialize().serializeArray() 方法都应该有效。是服务器的问题,和jQuery无关?

标签: java javascript jquery getjson illegalargumentexception


【解决方案1】:

如果你想提交一个表单到服务器,你可以简单地使用 jQuery 的serialize() OR serializeArray() 方法。

$.getJSON(inputURL, $(formName).serialize(), onReturnFunction); 

如果元素名称匹配正确,您应该将 serialize/serializeArray 方法返回的数据填充到表单 bean 中。

序列化方法的here is a working example(复制自jQuery网站)

来自BeanUtils.populate servlet 方法的java.lang.IllegalArgumentException 是由于提交的数据与表单bean 上的数据之间的数据类型不匹配。

【讨论】:

  • 谢谢 Lobo,你是对的。我的操作表单中有一个 Date[] 属性,我们无法做到这一点。我相信我们在应用程序的其他地方使用了 Date ,所以我猜操作表单会接受它,但是 Date[] 无法从正常的序列化数据正确转换。我曾假设 .serialize() 方法没有以正确的格式向 .getJSON() 提供数据,因为我的操作类开头的断点从未到达。
猜你喜欢
  • 2015-07-08
  • 2013-04-07
  • 2012-01-04
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
相关资源
最近更新 更多