当前位置: 首页 > 面试题库 >

在jQuery Ajax上使用history.pushstate

马华茂
2023-03-14
问题内容

我有一个基于ajax的应用程序,其中我只有一个登录页面和主页。

我的大多数链接都是“ ajaxed”的,我这样做的方式是:

//get the href of the link that has been clicked, ajaxify ANY links

$(document).on('click', '.tree a', function () {

            var link = $(this).attr('href');  //get the href off the list
            $.ajax({                          //ajax request to post the partial View
                url: link,
                type: 'POST',
                cache: false,
                success: function (result) {
                    $('#target').html(result);
                    $.validator.unobtrusive.parse($("form#ValidateForm"));
                }
            });
            return false; //intercept the link
   });

我想在我的应用程序上实现“ pushState”,到目前为止,我要做的第一步是添加以下代码:

$(document).on('click', 'a', function () {
            history.pushState({}, '', $(this).attr("href"));
 });

现在,只要我单击任何链接,就会更新我的地址栏,并且ajax内容会成功加载。我对这个API有点陌生,所以我不知道我缺少什么,但是到目前为止,这是我的问题:

  1. 当我按下“返回”按钮时,什么也没发生。我阅读了有关“ popstate”的内容,并浏览了SO来寻找解决方案,但我似乎无法使它们正常工作。

  2. 当我单击历史记录中的链接时,我获得了子html的“原始”视图,而没有来自主html的布局。如果我希望它像从主应用程序中单击一样显示,该怎么办?

我的大多数子视图都是表格或列表。


问题答案:

此代码应该可以帮助您:

function openURL(href){

        var link = href;  //$(this).attr('href');                                    
        $.ajax({                                                             
            url: link,
            type: 'POST',
            cache: false,
            success: function (result) {
                $('#target').html(result);
                $.validator.unobtrusive.parse($("form#ValidateForm"));
            }
        });
        window.history.pushState({href: href}, '', href);
}

$(document).ready(function() {

   $(document).on('click', 'a', function () {
     openURL($(this).attr("href"));
     return false; //intercept the link
   });

   window.addEventListener('popstate', function(e){
      if(e.state)
        openURL(e.state.href);
   });

});


 类似资料:
  • 我正在尝试使用Struts 2和jQuery构建Web应用程序。 在改变下拉列表时,我需要从数据库中获取详细信息。在我的< code>struts.xml配置中,我将方法和操作定义如下: 当我在所有相应位置进行更改后执行应用程序时,请求被传递给 类和 DAO 方法,并且控件成功返回到屏幕。但是返回的数据在屏幕上不可用,我收到一条错误消息: url…404未在jQuery中找到(匿名函数)ajax。

  • 我正在尝试使用JQuery在Ajax中向请求添加头。 以下是代码:- 然后我使用了要求(要求是chrome火狐插件,我们可以手动添加一个标题到请求)。 手动添加标题后:- 在这两个pics请求头中,“ACCESS-CONTROL-request-HEADERS”中都有x-auth-token,但第二个pic中有“x-auth-token”头和头值,而第一个pic中没有。 所以我的问题是如何使用JQ

  • 如何在jQuery AJAX中更改成功块中freemarker变量的值,我的页面有两个控制器第一个控制器使用GET方法返回一个带有视图名称的简单字符串,第二个控制器使用json和POST方法处理数据 给你 我的第二个控制器 我的Json方法 我的传呼myform.html 到目前为止,我的freemarker变量得到了我放在success块中的值,但在我按下submit按钮之前它显示为succes

  • 问题内容: 有人尝试过使用Android应用程序吗? 可能吗?我试图从中使用Jar,并收到以下异常: 我使用的代码非常简单 我有,,和在我的目录中。 在我的服务器应用程序中,此代码可以在相同的库中正常工作。 问题答案: msgpack :可在Android上正常使用 msgpack-rpc :适用于Android,但有一个警告。 具体来说,您需要为API级别8(Android 2.2.1)添加以下

  • 我有一些用RNCryptor加密的图像文件,我想对它们进行解密,并将它们用作框架布局的背景。我浏览了示例文件,但我的应用程序force在一段时间后关闭,没有显示任何图像。我使用JNCryptor库 我将加密图像放入raw文件夹,如下所示: 这是我活动中的代码: 这个文件可以很好地iOS这个代码: 这里是logcat输出: 08-2819:52:11.720:E/AndroidRuntime(106

  • 我编写了一个JUnit测试,使用Mockito和PowerMock模拟一些类。我试图将其转换为cucumber测试,但静态的PowerMock特性不起作用。 两类相关cucumber的提取物: 虽然这段代码在JUnit测试中工作,但它在这里失败了--它进入了方法,该方法应该被模拟,然后通过在其中执行代码而失败。我试着加了几行: 对上述两个类(当然,我不能在类中使用,因为它已经有一个注释),但这不会