jQuery.get()出现奇怪问题

Strange issue with jQuery.get()

本文关键字:问题 get jQuery      更新时间:2023-09-26

我对这个代码有一个奇怪的行为:

<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")",它不会阻塞。

有人能解释一下错误在哪里,或者这种行为的原因吗?

提前感谢

Rafa

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

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

更新的答案:

仔细想想,你可能应该用一种完全不同的方式来做这件事。当用户点击提交按钮时,您将发送数据,但请记住,如果用户在输入文本框中键入时点击回车键,则表单将提交,但您的代码不会捕捉到这一点。

一个更稳健的解决方案是这样做:

<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时运行

希望这能有所帮助,Sandro