【问题标题】:making a javascript function/button click event call on another page在另一个页面上调用 javascript 函数/按钮单击事件
【发布时间】:2011-11-22 05:06:22
【问题描述】:

我需要调用一个 javascript 函数(包含 jquery.ajax() 调用),例如 showfilterresult()。这个调用是在一个页面monitoring.gsp onclick上调用一个像“filter”这样的按钮。

我正在进行的调用来自不同的页面,我需要做的是加载 montoring.gsp 页面,并在加载的页面上进行此 showfilterresult() 调用。 (所以我想进行 2 次调用,一次调用页面,另一调用调用页面上的函数)

现在我正在这样做:

 <javascript>
jQuery.ajax({
     var myurl = /myapp/users/monitoring
        url: myurl,
        dataType: 'html',
        timeout: 10000,
        beforeSend: function() {
             jQuery('#mydiv').html(../showspinner.gif)
          },
        success: function(data) {
        window.location = myurl;
        }
      });

</javascript>

showfilterresult()函数如下:

function showFilterResult(){
    var frm=jQuery('#fromDate').val();
    var to=jQuery('#toDate').val();
    if($('#fromDate').val().length>0  && $('#toDate').val().length>0){
            jQuery.ajax({
                type:'POST',
                data:{
                    'timeWindow':$("#timeWindow").val(),
                    'p1':p1,
                    'p3':$('#p3 option:selected').text(),
                    'fromDate':$("#fromDate").val(),
                    'toDate':$("#toDate").val(),
                },
                url: '/myapp/users/filterResult',
                beforeSend: function() {
                    jQuery("#filteredResult").html('/showspinner.gif')
                },
                success:function(data,textStatus){
                    jQuery("#filteredResult").html(data)
                }
            });

我还需要知道如何将 url 参数从我的页面传递给 showfilterresult() 调用,默认情况下,该函数从 monitoring.gsp 页面上的文本字段中获取值。

更新:这类似于:我有我的个人网页,我需要调用另一个网页,如 google.com,还需要传递一些参数并使用参数调用 google.com 上的“搜索”调用,所以一次我点击链接/按钮我的网页,它不仅转发到 google.com,而且还使用我传递的参数调用搜索事件,我直接看到谷歌搜索结果页面。

问候, 普里扬克

【问题讨论】:

  • 这是实际的 Javascript 代码吗?如果是这样,像 jQuery.ajax({ var myurl = /myapp/users/monitoring … }) 这样的构造应该在 any 情况下抛出 JS 错误。
  • 不是实际的网址...我已经更改了网址
  • 这不是我的意思 :) — 尝试jslint.com 检查您的代码并解决问题。作为指针:这种表示法中的 JS 对象只能包含 key:value 这样的 { key1: "value1", key2: "value2", … } 对——没有别的,没有 var=;,除非它在一个值的匿名函数中。
  • 嗨,这是一个工作正常的现有函数,所以我现在不想更正它,它在一个外部 .js 文件中,我需要知道的是我可以调用具有调用此函数并通过传递(类似于) filter.clicked() 调用此函数,因为此函数在过滤器按钮单击时调用,我需要知道如何将当前页面中的参数传递给此功能?
  • 这可能不是最好的方法,但是让你的第一个 ajax 调用控制器中的一个动作,并在该动作中使用你想要的模态值渲染模板 _montoring.gsp,例如设置一个标志true 并在加载事件上的 _monitoring.gsp 上检查该值并做出相应的响应。

标签: javascript jquery grails


【解决方案1】:

不要使用原生的jQuery.ajax 函数。在 grails 中,您有一个 jquery 插件。

  1. 使用grails install-plugin jquery安装此插件。

  2. 使用&lt;g:javascript library="jquery" /&gt;将jQuery文件导入你的html

  3. 将您的第一个 AJAX 函数替换为:

    <g:remoteFunction
         controller="user"
         action="monitoring"
         before="$('#mydiv').html('../showspinner.gif')"
         onComplete="window.location = ${createLink(
             controller: 'user', 
             action: 'monitoring')}" />
    
  4. 将您的第二个 AJAX 函数替换为:

    <g:remoteFunction
         controller="user"
         action="filterResult"
         params="$('#yourFormId').serialize()"
         before="$('#filteredResult').html('/showspinner.gif')"
         update="filteredResult" />
    

也许您必须检查您的参数是否设置正确。在任何情况下,您都可以使用params 标签在第一种情况下提供参数。

【讨论】:

  • 是的,它的语法变化很好,我不在我调用的页面中使用表单,因为我从另一个来源获取所有值。此外,您显示的第二个函数将在第一个函数的页面加载时调用,我不能将其称为 seperatley,因为“filteredresult”div 是 monitoring.gsp 页面的一部分。
  • 不要在页面加载时进行 Ajax 调用。将您需要的内容直接渲染到响应中。因此使用更新标签而不是手动更改 URL。
  • 我终于能够做我想做的事了。我在第一次调用监视操作时传递我的参数,使用隐藏字段从这些参数设置结果页面上的文本字段,以便文本字段是全部填充,然后通过传递隐藏标志并在结果页面的页面加载上检查它来自动在填充页面上调用搜索事件......只需单击一次!感谢您的提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多