1

您好 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'] == '海滩'){
        $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);
        $普拉亚 = 数组();
        而($results = mysqli_fetch_assoc($query)){
            array_push($praia, array('id' => $results['id'], 'title' => urlencode($results['title'])));
        }
        回声 json_encode($praia);
    }

`

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

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

`

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

            $j.ajax({
                网址:你,
                contentType: "应用程序/json;charset=UTF-8",
                成功:函数(数据){
                    如果(数据。长度){
                         /****
                           这就是我卡住的地方,因为我找不到方法来确保
                           数据实际上正在被处理/处理。
                           我已经尝试过警报和各种其他选项来填充
                           选择。
                           我知道它被调用是因为 before: and after: 函数
                           在工作中。
                         *****/
                        /*
                        $j.each(数据,函数(k,v){
                            var o = 新选项();
                            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);
                    }
                },
                发送前:函数(){
                    $j(theDiv).hide();
                },
                完成:函数(){
                  $j(theDiv).show();  
                },
                数据类型:'json',
            });
        }

`

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

4

3 回答 3

2

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

当你改变它时它正在工作,

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

更新:

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

于 2012-04-22T14:07:29.060 回答
1

这是一个常见的 JSON 解析静默错误。

如果 JSON 格式不正确,ajax 请求将静默失败。

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

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

于 2012-04-22T15:17:53.393 回答
0

回答我自己的问题:由于我不是 AJAX/JSON 专家,我不知道这是否是预期的行为,但生成 AJAX 结果的响应页面不能包含与预期不同的数据。由于我留下了一个区域的输出,请求页面在处理它时遇到了问题。一旦我删除了不必要的数据,选择列表就会更新得很好。

那是我在帖子中忘记提及的事情,因为我认为页面中有多个结果是可以的。使用 Firebug 检查代码,请求得到了很好的处理。

感谢大家的宝贵时间,给您带来的不便,我们深表歉意...

我不得不将 htmlentities 添加到响应页面,因为重音返回 null,尽管我在每个文件上都明确使用 UTF-8 ......

于 2012-04-23T04:19:30.927 回答