通过输入javascript的邮政编码获取城市和州

时间:2013-04-05 03:33:31

标签: php javascript jquery ajax

我有一个包含city,state,zip,lat,long,county的现有数据库:40,000多条记录。

我可以毫无问题地使用它。

我现在要做的是当用户在表单中输入邮政编码,查询数据库并获取相关的城市,州,纬度,地区和县。

脚本执行“ONBLUR”但没有任何反应。我确认我正在调用该函数,因为我插入了window.alert("Test")

这是javascript:

function updateCityState()
   {
   {
    var zipValue = document.getElementById('zipcode').value;
    if(zipValue!="")
    {
        var url = "admin/includes/zip_check.php";
        var param = "?zip=" + escape(zipValue);

        var ajax = getHTTPObject();

        ajax.open("GET", url + param, true);
        ajax.onreadystatechange = handleAjax;
        ajax.send(null);
    }
}
}
 function handleAjax()
{
if (ajax.readyState == 4)
{
    citystatearr = ajax.responseText.split(",");

    var city = document.getElementById('city');
    var state = document.getElementById('state');

    city.value = citystatearr[0];
    state.value = citystatearr[1];
}
 }

我的“zip_check.php”文件看起来像这样....当我手动查询时,zip_check正常工作......

include_once("../db.php");
$query = "SELECT * FROM `cities_extended` WHERE `zip`=".mysql_real_escape_string($_GET['zip']);
$result = mysql_query($query) or die(mysql_error());


$row = mysql_fetch_array($result);
echo $row['city'].",".$row['state_code'];

我是否需要包含类似JQuery之类的内容或其他我无法使用的内容?我的语法是否正确?

4 个答案:

答案 0 :(得分:2)

正如@elclanrs所说,你function updateCityState()中有多余的var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } 。其次,您从服务器端发回哪种数据类型? json,xml,text或html,这个信息非常重要,你必须仔细考虑这一点。通过实现AJAX方法而不是通过jQuery等库来使用它,您必须确保正确定义响应数据类型,处理响应状态并与多个浏览器兼容。下面的代码段是一个示例:

{{1}}

以这种方式进行调试并不容易,如果您仍想保留此实现,可以参考this。就个人而言,我建议你使用jQuery来开展业务。

答案 1 :(得分:1)

考虑使用jQuery.ajax函数,它为您完成所有艰苦的工作!请参阅官方API文档:http://api.jquery.com/jQuery.ajax/。您的jQuery代码可能如下所示:

function updateCityState()
{
    var zipValue = $('#zipcode').val();
    if(zipValue == "")
    {
        alert('enter a zip value!');
    }
    else
    {
        //process ajax request
        var zipcodeRequest = $.ajax({
             type: "GET",
             url: "admin/includes/zip_check.php",
             data: { zip:zipValue }
        });

        zipcodeRequest.done(function(data)
        {
             alert( "You have successfully found your zip code." + data );
             //do something with your data here...
             $('#city').val(data.city);
             $('#state').val(data.state);
        });

        zipcodeRequest.fail(function(jqXHR, textStatus)
        {
             alert( "We could not find your zip code (" + textStatus + ")." );
        });
    }
}

这里有一些更多的ajax代码示例可以帮助您弄清楚:

  1. http://www.jquery4u.com/demos/ajax/
  2. http://www.jquery4u.com/function-demos/ajax/

答案 2 :(得分:0)

如果您不想使用jquery,尝试使用它,它的简单ajax但与您的实现不同

function updateCityState()
{
var xmlhttp;
var zipValue = document.getElementById('zipcode').value;  
if (zipValue=="")
  {
    var city = document.getElementById('city');
    var state = document.getElementById('state');

    city.value = "";
    state.value = "";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    citystatearr = xmlhttp.responseText.split(",");

    var city = document.getElementById('city');
    var state = document.getElementById('state');

    city.value = citystatearr[0];
    state.value = citystatearr[1];
    }
  }

xmlhttp.open("GET","admin/includes/zip_check.php?zip="+zipValue,true);
xmlhttp.send();
}

答案 3 :(得分:-1)

尝试使用php文件的确切路径。

var url = "admin/includes/zip_check.php";

类似于:

var url = "http://mysite.com/admin/includes/zip_check.php";