单击时填充传单弹出窗口

2024-02-03

我目前正在传单地图上放置带有弹出窗口的标记,如下所示:

L.marker([33.767675, -84.537291], {icon:orangeIcon}).addTo(map).bindPopup("弹出窗口的一堆动态html内容");

我有很多标记,其中有很多弹出内容,因此为了加快地图渲染/页面加载速度,我想使用基于 URL 的内容填充实际的弹出窗口,但仅在单击该标记时进行。

关于如何做到这一点有什么想法吗?

我确实找到了这个例子(通过https://github.com/Leaflet/Leaflet/issues/947 https://github.com/Leaflet/Leaflet/issues/947) ,但我的弹出窗口只是停留在“正在加载...”并且似乎从未加载网址:

    var marker = L.marker([33.767675, -84.537291]).addTo(map);
    marker.bindPopup("Loading...");

    marker.on('click', function(e) {
            var popup = e.target.getPopup();
            var url="http://www.someurl.com/file.html";
            $.get(url).done(function(data) {
                popup.setContent(data);
                popup.update();
                });
            });

在考虑也许 .get 方法应该是 .ajax 时,我尝试了这个......但仍然没有骰子:

    var marker = L.marker([33.767675, -84.537291]).addTo(map);
    marker.bindPopup("Loading...");

    function onMapClick(e) {
            var popup = e.target.getPopup();
            var url="http://www.r-stop.com";

            $.ajax({ 
                url:"http://www.r-stop.com/index.html"
            }).done(function( data ) {
                popup.setContent( data );
                popup.update();

                });

            };

    marker.on('click', onMapClick );

所以...编辑...下面的代码可以工作,但返回 .fail 函数。 我的 $.ajax 请求似乎出了问题。弹出窗口填充“FAIL: [object OBJECT]”

    var marker = L.marker([33.767675, -84.537291]).addTo(map);
    marker.bindPopup("Loading...");

    function onMapClick(e) {
            var popup = e.target.getPopup();


            $.ajax({
                url: "myfile.html",
                })
                .done(function( data ) {
                    popup.setContent( data );
                    popup.update();
                    })
                .fail(function( data ) {
                    popup.setContent( 'FAIL: ' + data );
                    popup.update();
                    });
            };

    marker.on('click', onMapClick );

我过去执行此操作的方法是在单击之后、发出 AJAX 请求之前创建一个虚拟弹出窗口。然后,请求完成后,关闭占位符,绑定真正的弹出窗口并打开它。

我不知道它如何(或者即使)适用于您所描述的简单标记对象,因为我只尝试过将其与 L.geoJson 图层结合使用。该方法的方便之处在于,它允许您访问 onEachFeature,它允许您调用函数以根据 geoJSON 对象的属性动态设置样式。

但是,当然,如果您有许多标记需要访问许多不同的 URL,那么您可能无论如何都希望将它们放入 GeoJSON 数据库中。像这样的东西:

var markerdata = {
"type": "FeatureCollection",
    "features": [{
    "type": "Feature",
        "geometry": {
        "type": "Point",
            "coordinates": [-84.537291, 33.767675, 0]
    },
        "properties": {
        "geometry": "Point",
            "name": "Test Marker 1",
            "url": "http://www.someurl.com/file_1.html"
    }
}, {
    "type": "Feature",
        "geometry": {
        "type": "Point",
            "coordinates": [-84.556685, 33.748580, 0]
    },
        "properties": {
        "geometry": "Point",
            "name": "Test Marker 2",
            "url": "http://www.someotherurl.com/file_2.html"
    }
}]
};

要实际绑定弹出窗口,该函数将如下所示:

function onEachMarker(feature, layer) {

layer.on('click', function (e) {
    //destroy any old popups that might be attached
    if (layer._popup != undefined) {
        layer.unbindPopup();
    }
        var marker_url = feature.properties.url;

        //display a placeholder popup
        var pop = L.popup().setLatLng(this._latlng).setContent('Loading...').openOn(map);

        //request data and make a new popup when it's done
        $.ajax({
            url: marker_url,
            success: function (data) {
                    //close placeholder popup
                    layer.closePopup();

                    //attach the real popup and open it
                    layer.bindPopup(data);
                });
                layer.openPopup();
            }
        });
    });
}

然后您可以使用 onEachFeature 来调用每个功能的函数:

//display markers on map
datalayer = L.geoJson(markerdata, {
    onEachFeature: onEachMarker
}).addTo(map);

您可以看到此方法正在运行(尽管略有不同)在这里摆弄 http://fiddle.jshell.net/nathansnider/w6ma3yzo/。每次单击标记时,都会向 tumblr API 发送 AJAX 请求,并根据 geoJSON 中包含的帖子 ID 提取缩略图的 URL。

如果您仍然无法让它工作,您应该通过 console.log 或您可以使用的任何调试方式检查您的 .get 或 .ajax 请求返回的内容(如果有的话)。服务器可能拒绝您的请求,或者 Leaflet 无法理解返回的数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单击时填充传单弹出窗口 的相关文章

随机推荐

  • 自动夹具奇怪的错误

    我收到这个错误 Ploeh AutoFixture Kernel IllegalRequestException 对 IntPtr 的请求是 检测到 这是不安全的资源 如果使用的话 进程会崩溃 所以请求被拒绝 普通的 IntPtr请求的来源
  • 在 WiX Burn 自定义托管引导程序中将 WIC 添加为 .NET 4.0 之前的要求

    我在获取包含自定义托管引导程序应用程序的刻录包以在某些不附带 Windows 成像组件的平台上启动时遇到问题 而安装 NET 4 0 需要使用该组件 Windows 2003 就是其中之一 我们使用标准方法来定义托管引导程序应用程序所需的内
  • 如何在php代码中嵌入html文件?

    我有很多 html 文件 现在我想使用一些 php 代码一一调用每个文件 但每当我尝试运行 php 代码来从文件夹中调用这些 html 文件时 它都不起作用 1 html view 2 html view 3 html view 因此 1
  • 无法将 Ribbon TextBox isEnabled 设置为 False

    我一直在尝试功能区控件并遇到可能的错误 或者我可能做错了什么 如果我有一个RibbonTextBox on the RibbonTab 并设置已启用 to False or True在代码后面 我只能将其设置为 false 而不能设置为 t
  • 无法使用L SDK的部分功能

    我正在尝试在新的 SDK 中使用新的活动转换 我尝试了这一行 getWindow requestFeature Window FEATURE CONTENT TRANSITIONS 但问题是Window不包括FEATURE CONTENT
  • Python 3.5 中的注释给出 unicode 错误

    我使用的是 Spyder IDE Python 3 5 它是 anaconda 发行版的一部分 下面给出了代码的前几行 coding utf 8 Created on Tue Sep 20 16 22 40 2016 author pava
  • 在后台线程上保存到 CoreData Context

    我已经为此苦苦挣扎了一段时间 苹果的文档和 SO 到目前为止没有帮助 我在 UIManagedDocument 上使用 ManagedObjectContext 并且下面的代码工作正常 然后我决定在 AppDelegate 中使用 Appl
  • 如何使用 RegEx 匹配方括号文字?

    匹配方括号的正则表达式是什么 我在用着 在一个模式中eregi replace 但似乎找不到 是正确的 但请注意 PHP 本身也有 作为转义字符 所以您可能必须使用 或不同类型的字符串文字
  • 帮助树递归

    我有一个 Person 类 我想创建一棵树 这是 Person 类的构造函数 public Person String name int age char gender Person c1 Person c2 c1 是左边的孩子 c2 是右
  • 在 Rails 中动态插入参数到 link_to

    在我的主页中 我有一个输入框 用户可以输入搜索查询 然后我有一个 link to 它将使用搜索查询向不同的页面 搜索页面 发出 get 请求 根据设计 我无法使用 Rails form for 在检测到输入框中的更改后 如何将查询动态插入到
  • 从 Pandas 数据框中的值中删除反斜杠

    我有一个包含反斜杠的 Pandas 数据框 我想去掉那些反斜杠 但我无法让替换功能工作 这就是我正在做的 df pd DataFrame data col1 a b ab col2 c cd df replace to replace va
  • 如何从 YouTube 上的多个视频 ID 创建播放列表?

    我有大量视频 ID 200 多个 我想使用所有视频 ID 创建一个 YouTube 播放列表 我从这里尝试了解决方案 https webapps stackexchange com questions 120451 how to creat
  • 处理分配问题的算法

    我需要一种算法 技术或任何指导来优化以下问题 我有两家公司 A公司有员工324人 B公司有员工190人 员工总数 A B 是514 我需要随机选择28 这 514 名员工中 好的 那么我们就这样做吧 514 的 28 是 143 92 哦
  • 更新 mac 上的 php 版本

    我想更新 php 版本 目前我有 5 5 38 我想要 7 1 到目前为止我尝试的是使用这个命令 curl s https php osx liip ch install sh bash s 7 1 我尝试了几个不同的版本 但没有一个有效
  • 使用 nvm 时管理全局 npm 包

    我觉得我需要能够将全局 npm 包单独安装到 NVM 目录中 nvm install v0 11 100 0 Now using node v0 11 16 node inspector Node Inspector v0 9 2 Visi
  • 如何解析php中的固定宽度列文本?

    如何在php中解析并显示以下文本并以html输出 我需要的是如何处理分隔列的空间的提示 空格数不固定 所以我不能使用explode string 而且我也不确定下面的输出结构是否具有真正固定宽度的列 我想让解析函数变得通用 输出来自db2
  • React with Typescript——使用 React.forwardRef 时的泛型

    我正在尝试创建一个通用组件 用户可以在其中传递自定义OptionType到组件以进行全程类型检查 该组件还需要一个React forwardRef 我可以在没有forwardRef 的情况下让它工作 有任何想法吗 代码如下 没有Forwar
  • Swift 2 - UICollectionViewFlowLayout 的行为未定义,因为:

    我正在使用集合视图来显示视频 一切正常 除了我收到一条警告 2015 10 30 14 00 39 893 测试 6451 90574 的行为 UICollectionViewFlowLayout 未定义 因为 2015 10 30 14
  • 使用 Xcode 7 运行 UITesting 时出现“NSInternalInconsistencyException”

    好吧 到目前为止我还无法在任何测试版中运行此测试 我遇到的一些问题是here https stackoverflow com questions 31713931 xcode 7 beta 4 crashes on ui recording
  • 单击时填充传单弹出窗口

    我目前正在传单地图上放置带有弹出窗口的标记 如下所示 L marker 33 767675 84 537291 icon orangeIcon addTo map bindPopup 弹出窗口的一堆动态html内容 我有很多标记 其中有很多