【问题标题】:jQuery AJAX not Working to Update City By ProvincejQuery AJAX 无法按省更新城市
【发布时间】:2010-07-30 00:12:01
【问题描述】:

正如标题所暗示的,我一直在使用 jQuery AJAX 尝试在选择省时从数据库中提取城市列表。

我正在使用以下代码:

$('#province').change(function()
{
    var province = $(this).val();

    /*$.get("<?php echo site_url('cottage/cities'); ?>?province="+province, function(data) 
    {
        console.log(data);
        for (i=0;i<=data.length;i++)
        {
            //$('#citydiv').append(data['city']+'<br/>');
            //$('#city').append('<option value="'+data[i]['city']+'">'+data[i]['city']+'</option>');
        }
    }); */
    $.ajax({
    url: "<?php echo site_url('cottage/cities'); ?>?province="+province,
    method: 'GET',
    dataType: 'json',
    success: onDataReceived
    }); 
    function onDataReceived(series) 
{
    console.log(series);

}   
});

我还有一个与它们相关的省和市下拉菜单。 问题是我不断收到“未定义”返回,因为它不喜欢我的数据发送方式。

数据如下:

[{"city_id":"1107","city":"Young's Point","province":"Ontario","lat":"44.490345","lon":"-78.236008"},{"city_id":"1108","city":"Zurich","province":"Ontario","lat":"43.421185","lon":"-81.624832"}]

任何帮助将不胜感激!

【问题讨论】:

    标签: jquery ajax select


    【解决方案1】:

    json 编码的字符串是这样的

    {"a":1,"b":2,"c":3,"d":4,"e":5}
    

    而你有方括号 尝试使用 json_encode($array);

    在 php 中编码您的数据

    【讨论】:

    • 对不起,我忘了我清理了我的结果。原始结果在数据周围有 { },但在整个数据集周围有一组 [ ]。 (更新问题)
    • 你试过 [...] 成功:function(data){ console.log(data); } ?
    • 检查你的错误控制台,如果 jquery 有解析问题,它应该显示一个错误。引用:在 jQuery 1.4 中,JSON 数据以严格的方式解析;任何格式错误的 JSON 都会被拒绝并引发解析错误。我也有点不明白为什么你仍然在 json 周围有方括号,只是为了清楚:从你的响应中删除所有方括号,否则它不是一个有效的 json 字符串,除非你在 {"an_array":["item1 ","item2 ","item3","item4"],"normal_var":"value"} 如您所见,json 前后没有方括号
    • 我一直在通过发送以下数据对其进行测试:{[{"city_id":"1109","city":"Alonsa","province":"Manitoba","lat": "50.801178","lon":"-98.977608"}]} - 它返回:City > 0 > City_id、City 等
    • 好的,现在我在本地测试了你的初始版本,它对我来说非常好用......我得到的最后一条线索:尝试在你的 php 脚本顶部插入:header('Content-Type:application /json');或者尝试将您的 json 编码为 utf-8: echo utf8_encode(json_encode($array));
    【解决方案2】:

    您的数据应如下所示

    [
        {"city_id":1, "city":"Aberfoyle", "province":"Ontario", "lat":43.472996, "lon":-80.152603},
        {"city_id":2, "city":"Actinolite", "province":"Ontario", "lat":44.543221, "lon":-77.325813}
    ]
    

    不要在数字周围加上引号,使用括号等。json_encode 很有用(正如 Christian Smorra 所说)。

    【讨论】:

    • 我更新了我的数据以显示它的样子。我为此使用 json_encode。
    • 您是否使用 Firebug 检查过没有响应?
    • 它找到一个响应,它只是为数据库中的每条记录返回 UNDEFINED。
    【解决方案3】:

    尝试使用 www.php.net/json_encode 正确编码您的 json 响应

    在您的 onDataReceived() 函数中,还要对此进行检查以确保它是有效数据。

    即使像这样简单的事情也可以阻止任何 JS 错误的发生。

    function onDataReceived(series) {
        if(series.length  > 0) {
             // do your stuff
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多