【问题标题】:JSON VALUE AS QUERY STRINGJSON 值作为查询字符串
【发布时间】:2014-04-30 02:19:31
【问题描述】:

我在我的 Drupal 7 网站上使用 Maxmind.Com 的 GeoIP2 (Omni) Web 服务来根据访问者的 IP 提取地理数据。

我可以使用以下代码获取 JSON 文档:

<script type="text/javascript" src="//js.maxmind.com/js/apis/geoip2/v2.0/geoip2.js">
</script>

<script type="text/javascript">

var onSuccess = function(location){
    console.log(
        "Lookup successful:\n\n"
        + JSON.stringify(location.city.names.en, undefined, 4)
    );
};

var onError = function(error){
    alert(
        "Error:\n\n"
        + JSON.stringify(error, undefined, 4)
    );
};

geoip2.omni(onSuccess, onError);

</script>

其中一个返回值是访问者的城市名称。如何将返回的值用作查询字符串的一部分?

例如,如果'city.names.en' = 'Detroit',我如何使用“Detroit”作为键从另一个文档、表格等中检索数据(例如本地电话号码)?

最终目标是根据访问者的位置将“本地”电话号码动态插入“联系我们”部分。

【问题讨论】:

    标签: javascript json drupal-7 geoip maxmind


    【解决方案1】:

    通常你会像这样格式化一个查询字符串:

    http://mydomain.com/route?parameterName=value
    

    对于您的示例,它可能如下所示:

    http://mydomain.com/phoneNumbers/phoneNumber?city=Detroit
    

    【讨论】:

    • 感谢 Jake,这是一个有用的回复,但如果我的目标是将上述请求发送到 Maxmind.com 以确定用户的城市,然后使用该城市名称填充电话号码字段怎么办页面加载时?我想我很难将这些查询“链接”(如果这是一个合适的术语)在一起,因为在我收到 maxmind 的响应之前,城市名称是未知的。换句话说,我如何编写一个脚本,在知道“cityname”后立即提取/插入“phone#”?
    • 换句话说,我怎么能说,当收到第一个 JSON 响应时,'load' [link](mydomain.com/phoneNumbers/phoneNumber?city="TBDcityname")
    • 这听起来像是一个你想看看使用承诺的例子。您可以等待结果,然后,如果成功,则处理响应。 jQuery 有一些内置功能可以做到这一点。 html5rocks.com/en/tutorials/es6/promises && api.jquery.com/jQuery.get
    • 我在正确的轨道上吗?: <script> var onSuccess = function(location){ console.log( "查找成功:\n\n" + JSON.stringify( location.city.names.en, undefined, 4) ) .done(function(location) $.get("<a href="http://mydomain.com/phoneNumbers/phoneNumber?city=" rel="nofollow" target="_blank">mydomain.com/phoneNumbers/phoneNumber?city=" + location.city.names.en); }; var onError = function(error){ console .log( "错误:\n\n" + JSON.stringify(error, undefined, 4) ); }; geoip2.omni(onSuccess, onError); </script>
    【解决方案2】:

    有两种方法可以实现您想要做的。

    • 使用ajax获取城市名称后加载联系方式。这是一个例子:

    &lt;span id="contact"&gt;&lt;/span&gt;

    <script type="text/javascript">
        $(document).ready(function() {
            geoip2.omni(function(data) {
                $.ajax({
                    type: "GET",
                    url: "your/url/to/contact/getter/service",
                    data: {
                        city : data.city.names.en
                    },
                    success: function(contact) {
                        // update your contact information
                        $("#contact").text(contact);
                    }
                }
            }, function(data) {
                debugger;
            });
        });
    </script>
    

    显然,您需要一个可以请求提供给定城市名称的联系信息的资源。

    • 创建联系信息地图并使用它来获取城市的联系信息,而无需再次发送请求。

    &lt;span id="contact"&gt;&lt;/span&gt;

    <script type="text/javascript">
        var contactMap = {
            NewYork : "123123",
            London : "9797987"
        }
        $(document).ready(function() {
            geoip2.omni(function(data) {
                // update your contact information
                $("#contact").text(contactMap[data.city.names.en]);
            }, function(data) {
                debugger;
            });
        });
    </script>
    

    【讨论】:

    • 我能够让选项二起作用。当我有时间时,我也会尝试第一个选项。我不知道该怎么感谢你才足够。上个月我一直在试图解决这个问题,我现在非常高兴。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    相关资源
    最近更新 更多