jQuery.get()的奇怪问题

时间:2012-03-30 15:46:41

标签: javascript jquery get liferay portlet

我对此代码有一种奇怪的行为:

<script type="text/javascript">
            function get() 
            {
                alert("gggg");
                jQuery.get (
                    "http://localhost:8080/c/portal/json_service", 
                    {
                        serviceClassName: "com.liferay.test.service.TrabajadorServiceUtil",
                        serviceMethodName: "findByName",
                        servletContextName: "TrabajadorPlugin-portlet",
                        serviceParameters: "[param]",
                        param : document.getElementById("nombre")
                    }
                );
            }
</script>

<div>
<form>
    <input type="text" id="nombre" value="<%=searching%>"/>
    <input type="button"  value="Submit" onClick="javascript:get()"/> 
</form>
</div>

按下“提交”按钮后,Liferay门户被阻止。显示消息“gggg”的弹出窗口,但单击确定后,页面将被阻止。

如果我删除'param:document.getElementById(“nombre”)'行,它就不会阻止。

任何人都可以解释一下错误或这种行为的原因在哪里?

提前致谢,

拉​​法

2 个答案:

答案 0 :(得分:4)

问题在于你试图将整个DOM元素作为param的值传递,jQuery不会喜欢它。哪种类型的元素具有ID nombre,以及您想要该元素的哪些属性?如果它是某种输入,你可能想要value属性,所以你可以这样做:

param : document.getElementById("nombre").value

答案 1 :(得分:1)

更新答案:

通过多一点思考,你应该以完全不同的方式做到这一点。您在用户点击提交按钮时发送数据,但请记住,如果用户在输入文本框中输入时输入,表单将提交,但您的代码将无法捕获。

更强大的解决方案是这样做:

<div>
  <form id="nombre_search">
    <input type="text" id="nombre" value="<%=searching%>"/>
    <input type="submit" value="Submit"/> 
  </form>
</div>​

<script type="text/javascript" charset="utf-8">
  $(document).ready(function() {
    $("#nombre_search").submit(function(){
      $.get("http://localhost:8080/c/portal/json_service", {
        serviceClassName: "com.liferay.test.service.TrabajadorServiceUtil",
        serviceMethodName: "findByName",
        servletContextName: "TrabajadorPlugin-portlet",
        serviceParameters: "[param]",
        param : $("#nombre").val()
      });
      return false;
    });
  });
</script>

您的代码更改:

  • 在表单中添加了一个ID。
  • 将提交按钮设为submit按钮,而不只是button
  • 将代码置于$(document).ready块内。
  • 代码在提交form时运行,而不是在点击button时运行。

希望这有帮助, 桑德罗