【问题标题】:get city and state from zip code entered javascript从输入 javascript 的邮政编码获取城市和州
【发布时间】:2013-04-05 12:31:34
【问题描述】:

我有一个现有的数据库,其中包含城市、州、邮编、纬度、经度、县: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 之类的内容或我缺少的其他内容才能使其正常工作?我的语法正确吗?

【问题讨论】:

  • 你的{} 太多了...正确缩进代码有助于捕获语法错误。
  • 人们会通知你停止在 PHP 中使用 mysql_xxxx 函数,因为它们已被弃用 - 改用 mysqli 或 PDO。干杯,很抱歉成为一种痛苦。
  • 感谢您的建议。我使用了 F12,它告诉我“getHTTPObject”没有定义.. ??????

标签: php javascript jquery ajax


【解决方案1】:

正如@elclanrs 所说,function updateCityState() 中有多余的 {。其次,你从服务器端发回什么样的数据类型? json、xml、text 或 html,这些信息非常重要,您必须谨慎使用。通过实现 AJAX 方法而不是通过 jQuery 等库使用它,您必须确保正确定义响应数据类型、处理响应状态并与多个浏览器兼容。下面的sn-p代码就是一个例子:

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

这种方式调试不容易,如果你还想保留这个实现,可以参考this。就个人而言,我建议你使用 jQuery 来做你的事情。

【讨论】:

    【解决方案2】:

    考虑使用 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/

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        类似于:

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

        【讨论】:

        • ajax 请求遵守相同的域策略,因此包含确切路径不是解决方案。如果路径是域 http 根的绝对路径,您可以简单地在它前面加上正斜杠 /
        猜你喜欢
        • 2013-04-05
        • 1970-01-01
        • 1970-01-01
        • 2015-09-25
        • 2012-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-20
        相关资源
        最近更新 更多