dtkf64283 2019-04-27 08:16
浏览 84
已采纳

从邮政编码中查找地址并编辑输入表单而无需重新加载页面

I am trying to add some functionality to a register page that I am building.

The functionality is finding an address from a postcode and adding that data to the input form.

I have found a way to do this but there are some issues involved with the way that I am doing it. At the moment I am using a form with a submit button then using if(isset($_post) which means the page will be reloaded once this submit button is hit which I dont want.

My thinking is that I will need to use some jquery or ajex to do with without reloading the form but honestly I am not sure where to begin.

I have wrote a funtion that returns the data that I need as an array

postcode_api_test.php

<?php
function lookuppostcode($postcode)
{
    $postcode = str_replace(" ", "", $postcode);
    $key = 'MY API KEY';
    $request = 'https://api.getAddress.io/v2/uk/' . $postcode . '?api-key=' . $key;
    $response = file_get_contents($request);
    $jsonresponse = json_decode($response, true);
    $returnData = array();

    $returnData['lat'] = $jsonresponse['Latitude'];
    $returnData['lon'] = $jsonresponse['Longitude'];
    $returnData['totalAddresses'] = count($jsonresponse['Addresses']);

    $addressArray = explode(',', $jsonresponse['Addresses'][0]);
    $returnData['locality'] = $addressArray[4];
    $returnData['city'] = $addressArray[5];
    $returnData['county'] = $addressArray[6];

    $returnData['addresses'] = array();

    foreach ($jsonresponse['Addresses'] as $address) {
        $addressArray = explode(',', $address);
        $fullAddress = '';

        foreach ($addressArray as $item) {
            if ($item != ' ') {
                $fullAddress .= $item . ",";
            }
        }
        $fullAddress = trim($fullAddress, ",");
        $returnData['addresses'][] = array(
            'line1' => $addressArray[0],
            'line2' => $addressArray[1],
            'line3' => $addressArray[2],
            'line4' => $addressArray[3],
            'locality' => $addressArray[4],
            'city' => $addressArray[5],
            'county' => $addressArray[6],
            'fullAddress' => $fullAddress,
        );
    }
    return $returnData;
}
?>

postcode.php:

<?php
include 'postcode_api_test.php';
<!DOCTYPE html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "ajex_test.js"> </script>

<form   method="post">
<form method = "post">
<div class="form-group">
    <label class="control-label">Entity Type</label>
    <label class="control-label">Title</label>
    <input type="text" name="postcode" id="postcode" class="form-control" value = "">
    <button class="btn btn-success"  onclick = "postcodelookup()" name = "postcodebtn" id="postcodebtn">  </button>


<div id="div1"><h2>Let jQuery AJAX Change This Text</h2></div>

</form>
</form>

I was wondering if anybody has any pointers of how to start this off?

ajax_test.js

function postcodelookup($postcode){
    $("#postcodebtn").click(function(){
    $.ajax({
        type: "GET",
        url: "postcodecall.php",
        data:{"postcode":$("#postcode").val},
        success: function(data){

            $("#div1").html(data);

        }
    });
});

};

postcodecall.php

<?php
include 'postcode_api_test.php';

if(isset($_GET["postcode"])){

$postcode = $_GET["postcode"];
lookuppostcode($postcode);
echo $data;
}
?>
  • 写回答

1条回答 默认 最新

  • dshnx48866 2019-05-03 18:45
    关注

    For anyone else that comes across this this is my working code any comments please let me know.

    I created a page returns the data in json format using the function i created. Then I created an ajax call to this page which allowed me to access this information without having to reload the main poscode_api page.

    There may be a smoother way to do if there is please share. This worked for me and seems fairly straight forward.

    Code below:

    _test page

    postcode.php

    <?php
    include 'postcode_api_test.php';
    ?>
    <!DOCTYPE html>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src = "ajex_test.js"> </script>
    
    
    <div class="form-group">
        <label class="control-label">Postcode</label>
    
        <input type="text" name="postcode" id="postcode" class="form-control" value = "">
        <button  onclick = "postcodelookup()"  name = "postcodebtn" id="postcodebtn">  </button>
        <select name = "postcode_lookup" id = "postcode_lookup" style = "display = hidden;">
        <option value = "Please Select"> </option>
        </select>
    
    
        <div>  <input type="text" name="addressline1" id="addressline1" class="form-control" value = ""> <label> Addressline1</div>
        <div>  <input type="text" name="addressline2" id="addressline2" class="form-control" value = ""> <label> Addressline2</div>
        <div>  <input type="text" name="addressline3" id="addressline3" class="form-control" value = ""> <label> Addressline3</div>
        <div>  <input type="text" name="addressline4" id="addressline4" class="form-control" value = ""> <label> Addressline4</div>
        <div>  <input type="text" name="town" id="town" class="form-control" value = ""> <label> town</div>
        <div>  <input type="text" name="county" id="county" class="form-control" value = ""> <label> county</div>
    
    
    </html>
    

    postcodecall.php

    <?php
    include 'postcode_api_test.php';
    
    if (isset($_GET["postcode"]) && $_GET["postcode"] != "") {
    
        $postcode = $_GET["postcode"];
        $data = lookuppostcode($postcode);
        $fulladdress = array();
        foreach ($data['addresses'] as $address) {
            $fulladdress[] = $address['fullAddress'];
        }
    
        $jsondata = json_encode($fulladdress);
        echo $jsondata;
    
    }
    

    ajax_test.js

    function postcodelookup($postcode)
    {    
            $.ajax(
            {
                type: "GET",
                url: "postcodecall.php",
                data:{postcode: $('#postcode').val()},
                dataType: 'json',
    
                beforeSend :function()
                {       
                    $("#postcode_lookup option:gt(0)").remove(); 
                    $('#postcode_lookup').find("option:eq(0)").html("Please wait..");
                },
                success: function(data)
                {
                    $('#postcode_lookup').show();
                    $('#postcode_lookup').find("option:eq(0)").html("Please select your Address");
                    alert('Please Select Address from the list - If your address is not here please enter manually. Thanks');
                    postcode_dropdown = '';
                    $(data).each(function(addressline,fulladdress)
                    {      
                    fulladdresstrim = fulladdress.replace(/ ,/g, '')
    
    
                    postcode_dropdown += '<option value = "' + fulladdress+'"> '+ fulladdresstrim +' </option>';                   
                    });             
                    $('#postcode_lookup').append(postcode_dropdown);        
                },
                error: function(jqxhr, status, exception) {
                    alert('Exception:', exception);
                }
    
            });
    
    }
    
    
    
        $(document).ready(function(){
            $('#postcode_lookup').hide();
            $('#postcode_lookup').on('change',function(){           
                var fulladdress = $(this).val();
                var addressline = fulladdress.split(",");
                    $('#addressline1').val(addressline[0]);
                    $('#addressline2').val(addressline[1]);
                    $('#addressline3').val(addressline[2]);
                    $('#town').val(addressline[5]);
                    $('#county').val(addressline[6]);
    
            });
        });
    

    postcode_api_test.php

    <?php
    
    
    function lookuppostcode($postcode)
    {
        $postcode = str_replace(" ", "", $postcode);
        $key = 'MY API CODE';
        $request = 'https://api.getAddress.io/v2/uk/' . $postcode . '?api-key=' . $key;
        $response = file_get_contents($request);
        $jsonresponse = json_decode($response, true);
        $returnData = array();
        $returnData['lat'] = $jsonresponse['Latitude'];
        $returnData['lon'] = $jsonresponse['Longitude'];
        $returnData['totalAddresses'] = count($jsonresponse['Addresses']);
        $addressArray = explode(',', $jsonresponse['Addresses'][0]);
        $returnData['locality'] = $addressArray[4];
        $returnData['city'] = $addressArray[5];
        $returnData['county'] = $addressArray[6];
    
        $returnData['addresses'] = array();
    
        foreach ($jsonresponse['Addresses'] as $address) {
            $addressArray = explode(',', $address);
            $fullAddress = '';
    
            foreach ($addressArray as $item) {
    
                    $fullAddress .= $item . ",";
    
            }
            $fullAddress = trim($fullAddress, ",");
            $returnData['addresses'][] = array(
                'line1' => $addressArray[0],
                'line2' => $addressArray[1],
                'line3' => $addressArray[2],
                'line4' => $addressArray[3],
                'locality' => $addressArray[4],
                'city' => $addressArray[5],
                'county' => $addressArray[6],
                'fullAddress' => $fullAddress,
            );
        }
        return $returnData;
    }
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题