从AJAX JSON结果数据填充选择列表

时间:2012-04-22 13:54:36

标签: php javascript jquery

Hello stackoverflow开发人员, 首先,抱歉,如果我找不到解决方案,但我已经尝试了一段时间了。 我不确定我的方法是否是最好的方法,所以,如果有替代AJAX和/ JSON的话,请随时提出建议。

我正在建立一个旅游指南网站,注册用户将根据地区和州包括他们的度假村,餐馆和旅游景点。我正在使用Joomla!和Seblod(有一些自定义的PHP,MySQL,Javascript和AJAX)。由于我不想手动创建27个动态选择,我一直在尝试使用PHP / AJAX / JSON / JQuery选择已注册海滩的列表(度假村和旅游景点必须与之相关)。

除了填充海滩列表外,一切正常,我不知道问题是什么。我尝试了多种方法来追加,创建或添加选项,但没有任何反应。 PHP / JSON结果是:

`
    [{"id":"17","title":"Porto+de+Galinhas"},{"id":"18","title":"Serrambi"},{"id":"19","title":"Tamandar%E9"}]

`

这是PHP脚本的结果:

`

    if($_GET['q'] == 'beaches'){
        $praiaSQL = sprintf("SELECT * FROM vp_content AS c LEFT JOIN vp_cck_store_item_content AS v ON c.id = v.id WHERE c.catid = 10 AND v.cck = 'praia' AND v.venue_state = '%s' ORDER BY c.title ASC;", $_GET['s']);
        $query = mysqli_query($connection, $praiaSQL);
        $praia = array();
        while($results = mysqli_fetch_assoc($query)){
            array_push($praia, array('id' => $results['id'], 'title' => urlencode($results['title'])));
        }
        echo json_encode($praia);
    }

`

我还需要一个处理重音字符的解决方案。我在这里尝试urlencode并在JQuery中解码,但可能是问题所在。当我将其作为原始数据保留时,当有重音字符时,结果项为空。

这是处理结果的相关JQuery(其中x = select和u =获取AJAX JSON结果的URL - 我已经评论了问题在代码中的位置):

`

    function setBeachList(x,u){
            var theDiv = "#cck1r_" + x;
            var theSelect = "#" + x;
            $j(theSelect).children("option:not(:first)").remove();

            $j.ajax({
                url: u,
                contentType: "application/json;charset=UTF-8",
                success: function(data){
                    if(data.length){
                         /****
                           This is where I'm stuck, as I can't find a way to make sure the 
                           data is actually being treated/handled.
                           I've tried alerts and all sorts of other options to populate the
                           select.
                           I know it's being called because the before: and after: functions 
                           are working.
                         *****/
                        /*
                        $j.each(data, function(k, v){
                            var o = new Option();
                            var newTitle = urldecode(v.title);
                            $j(o).html(newTitle).val(v.id);
                            $j(theSelect).append(o);
                        });
                        */
                        var htm = '';
                        for (var i = 0; i '+urldecode(data[i].title)+'';
                        }

                        $j(theSelect).html(htm);
                    }
                },
                beforeSend: function(){
                    $j(theDiv).hide();
                },
                complete: function(){
                  $j(theDiv).show();  
                },
                dataType: 'json',
            });
        }

`

感谢您的时间和耐心,我不是这方面的专家(不完全是新手,但是很接近......)。

3 个答案:

答案 0 :(得分:2)

urldecode不是javascript函数, 您可以使用decodeURIComponent代替它。

当你改变它时它会起作用,

http://jsfiddle.net/MzMPK/1/

<强>更新

我认为你的问题是尝试对重音字符进行编码,如果所有编码都设置为UTF-8,它应该在不编码的情况下工作。

答案 1 :(得分:1)

这是一种常见的JSON解析无提示错误。

如果JSON格式不正确,则ajax请求将无提示失败。

此问题的第二个最常见原因是编码。确保在调用AJAX的页面和返回数据的脚本中使用UTF-8。

重音数据的问题可以通过不对服务器端的数据进行编码来解决,因此无需在客户端进行解除。

答案 2 :(得分:0)

回答我自己的问题: 由于我不是和AJAX / JSON专家,我不知道它是否是预期的行为,但是生成AJAX结果的响应页面不能具有与预期不同的数据。由于我留下了区域的输出,请求页面在某种程度上处理它有问题。删除不必要的数据后,选择列表就更新了。

这是我在帖子中忘记提及的内容,因为我认为在页面中有多个结果是好的。使用Firebug检查代码,请求正常。

感谢大家的时间,对此给您带来的不便表示歉意......

我必须在响应页面中添加htmlentities,因为重音符号返回null,尽管我在每个文件上明确地都有UTF-8 ...