Php 从输入的邮政编码获取城市和州

Php 从输入的邮政编码获取城市和州,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,我有一个现有的数据库,其中包含城市、州、邮编、纬度、长、县:40000多条记录 我可以毫无问题地使用它 我现在要做的是,当用户在表单中输入邮政编码时,查询数据库并获取相关的城市、州、纬度、长和县 脚本执行“ONBLUR”,但什么也没发生。我验证了我调用函数的正确性,因为我插入了一个window.alert(“Test”) 下面是javascript: function updateCityState() { { var zipValue = document.getEleme

我有一个现有的数据库,其中包含城市、州、邮编、纬度、长、县:40000多条记录

我可以毫无问题地使用它

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

脚本执行“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_检查会起作用

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之类的东西,或者我缺少的其他东西才能让它工作?我的语法正确吗?

尝试使用php文件的精确路径

var url = "admin/includes/zip_check.php";
例如:

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

考虑使用jQuery.ajax函数,它可以为您完成所有艰苦的工作!请参阅官方API文档:。您的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代码示例,以帮助您解决此问题:


  • 正如@elclanrs所说,在
    函数updateCityState()中有冗余的{
    。其次,您从服务器端返回什么样的数据类型?json、xml、文本或html,这些信息非常重要,您必须小心处理。通过实现AJAX方法而不是通过jQuery等库使用它,您必须确保正确定义响应数据类型、处理响应状态和兼容性e与多个浏览器一起使用。下面的代码段就是一个示例:

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

    以这种方式进行调试并不容易,如果您仍然希望保留此实现,您可以参考。就个人而言,我建议您使用jQuery来完成您的业务。

    如果您不想使用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();
    }
    

    您的
    {}
    太多了…正确缩进代码有助于捕获语法错误。人们会通知您停止在PHP中使用mysql_xxxx函数,因为它们已被弃用-请改用mysqli或PDO。干杯,很抱歉,这是一种痛苦。感谢您的建议。我使用了F12,它告诉我“getHTTPObject”未定义..?????ajax请求遵守相同的域策略,因此包含确切路径不是解决方案。如果路径是域http根的绝对路径,则只需在其前面加一个正斜杠即可/