douzhanjia0773 2013-05-13 07:57
浏览 49
已采纳

如何搜索http请求生成的输出

I am using THIS api for searching postcodes in a range around it. it generates an automatic output when I type in a postcode (1234) for example. it's using jquery autocomplete for that.

Now is my question. How can I save that output in a session and search within that session to match any of the postcodes I have in my companydatabase?

my code looks like this:

my form:

<form action="#" method="post" class="pro6pp_range">
    <input type="text" class="postcode" placeholder="Postcode (1234)" maxlength="4">
      <select class="range">
        <option value="5" selected="selected">5 km</option>
        <option value="10">10 km</option>
        <option value="15">15 km</option>
        <option value="20">20 km</option>
        <option value="25">25 km</option>
      </select>
      <br/><br/>
    <span class="message"></span>
    <div class="output"></div>
    <br/>
</form>

my javascript:

<script type="text/javascript">
  var pro6pp_auth_key = "MY_AUTH_KEY";
  $(document).ready(function() {
    $(".pro6pp_range").applyRange({ 'assemble_func': assemble_one });
    function assemble_one(result) {
        distance_km = Math.round(result.distance / 1000);
        return "Afstand tot " + result.nl_fourpp + " is " + 
        distance_km + " km vanaf uw locatie.<br />";
    }
  });
</script>

Range.js:

// Create closure to keep namespace clean and hide implementation.
(function($) {
    $.fn.applyRange = function(options) {
        var instance = this;

        function getConfig(field, default_value) {
            if (typeof options === 'undefined' ||
                typeof options[field] === 'undefined') {
                return default_value;
            } else {
                // Developer chose to specify form field manually.
                return options[field];
            }
        }

        instance.postcode = getConfig('postcode', instance.find('.postcode'));
        instance.range = getConfig('range', instance.find('.range'));  
        instance.message = getConfig('message', instance.find('.message'));
        instance.spinner = getConfig('spinner', instance.find('.spinner'));
        instance.output = getConfig('output', instance.find('.output'));

        instance.distance = getConfig('distance', instance.find('.distance'));
        instance.lat = getConfig('lat', instance.find('.lat'));
        instance.lng = getConfig('lng', instance.find('.lng'));
        instance.nl_fourpp = getConfig('nl_fourpp', instance.find('.nl_fourpp'));

        instance.assemble_func = getConfig('assemble_func', assemble_one);

        instance.postcode.keyup(function() {
            range(instance);
        }); 
    };

    var pro6pp_cache = {};
    function pro6pp_cached_get(obj, url, params, callback) {
        var key = url + $.param(params);
        if (pro6pp_cache.hasOwnProperty(key)) {
            if (typeof callback !== 'undefined') {
                callback(obj, pro6pp_cache[key]);
            }
        } else {
            $.getJSON(url + "?callback=?", params, function(data) {
                pro6pp_cache[key] = data;
                if (typeof callback !== 'undefined') {
                    callback(obj, data);
                }
            });
        }
    }

    function getApiBaseUrl() {
        // Use HTTPS API if website itself is also secure.
        // Otherwise, some browsers might complain about insecure content.
        if ("https:" === document.location.protocol) {
            return 'https://pro6pp.appspot.com/v1';
        } else {
            return 'http://api.pro6pp.nl/v1';
        }
    }

    function range(obj) {
        obj.message.hide().empty();
        var postcode = obj.postcode.val();
        var range = obj.range.val();
        // Trigger on '5408'
        var nl_fourpp_regex = /[0-9]{4,4}\s?/;
        if (nl_fourpp_regex.test(postcode)) {
            var url = getApiBaseUrl() + "/range";
            var params = new Object();
            params.auth_key = pro6pp_auth_key;
            params.per_page = 100;
            params.nl_fourpp = postcode;
            // User puts in range in kilometers, API uses meters.
            range = parseInt(range, 10) * 1000;
            params.range = range;
            pro6pp_cached_get(obj, url, params, fillin);
        }
    }

    function assemble_one(result) {
        distance_km = Math.round(result.distance / 1000);
        return "Afstand tot " + result.nl_fourpp + " is " + distance_km + " km<br />";
    }

    function fillin(obj, json) {
        if (json.status == 'ok') {
            obj.output.empty();

            var postcode = obj.postcode.val();
            $.each(json.results, function(i, result) {
                if (result.nl_fourpp === postcode) {
                    return true;
                }
                obj.output.append(obj.assemble_func(result)).show();
            });
            if (json.results.length > 1) {          
                obj.distance.val(json.results[1].distance);
                obj.nl_fourpp.val(json.results[1].nl_fourpp);
                obj.lat.val(json.results[1].lat);
                obj.lng.val(json.results[1].lng);
            } else {
                translated_message = 'Geen resultaten gevonden';
                obj.message.html(translated_message).show();
            }
        } else {
            var translated_message = json.error.message;
            if (json.error.message == 'nl_fourpp niet gevonden') {
                translated_message = 'Onbekende postcode';
            } else if (json.error.message == 'Invalid nl_fourpp format') {
                    translated_message = 'Ongeldig postcode formaat';
            } else if (json.error.message == 'invalid target_nl_fourpps format') {
                translated_message = 'Ongeldig target_nl_fourpps formaat';
            }

            obj.message.html(translated_message).show();
        }
    }
})(jQuery);

I hope someone knows how to save an output from a request to a session/cookie.

  • 写回答

1条回答 默认 最新

  • doufen1890 2013-05-13 11:46
    关注

    If I understood well what you want, I think when you function is done, you have to call an ajax function to send out put to a php script on the server, that will save that output in a session and you can do any processing you want from there.

    function send_data_to_server(output)
    {
        var postal_code=$('.postcode').val();
        var url = 'http://kees.een-site-bouwen.nl/script.php?output='+output+'&postal_code='+postal_code;
    
        $.ajax({
            url : url,
            success : function (data)
            {
                alert(data);
            }
        });
    }
    

    and just before your return "Afstand tot " + result.nl_fourpp + " is " +distance_km + " km vanaf uw locatie.
    ";

    put this line of code:

      send_data_to_server(result.nl_fourpp);
    

    script.php

    <?php 
         session_start();
         $output=$_GET['output'];
         $_SESSION['postal'][]=$output;
         echo $output;
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题