2013-05-13 48 views
1

我正在使用THIS api搜索範圍內的郵編。 例如,當我輸入郵編(1234)時,它會生成一個自動輸出。 它使用jQuery自動完成。如何在由http請求生成的輸出中搜索

現在是我的問題。 如何將會話中的輸出保存並在該會話中搜索以匹配我公司數據庫中的任何郵編?

我的代碼看起來是這樣的:

我的表格:

<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> 

我的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); 

我希望有人知道如何保存請求t的輸出o會話/ cookie。

回答

1

如果我很好地理解你想要什麼,我認爲當你的功能完成後,你必須調用一個ajax函數發送到服務器上的php腳本,這將在會話中保存輸出,你可以從那裏做任何你想要的處理。

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); 
     } 
    }); 
} 

和之前你的回報 「Afstand TOT」 + result.nl_fourpp + 「是」 + distance_km + 「公里vanaf UW locatie
。」

,就把這行代碼:

send_data_to_server(result.nl_fourpp); 

的script.php

<?php 
    session_start(); 
    $output=$_GET['output']; 
    $_SESSION['postal'][]=$output; 
    echo $output; 
?> 
+0

是的,這就是我的意思。但我怎麼能這樣做。 – 2013-05-13 12:51:42

+0

我正在使用api。所以我的網址是從range.js文件加載它從API網站。如何做到這一點? – 2013-05-13 13:52:37

+0

你是什麼意思,你在說什麼文件?如果你擔心php文件的路徑,那麼使用url,只要它在同一個域上就可以工作。 var url =「http://your_domain.com/script.php?output=」+ output;有一個http://但它會丟失,當SO自動鏈接的url – CodeBird 2013-05-13 13:55:20

相關問題