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

Php 从AJAX JSON结果数据填充选择列表,php,javascript,jquery,Php,Javascript,Jquery,你好,stackoverflow开发者, 首先,如果我找不到解决方案,很抱歉,但我已经尝试了一段时间了。 我不确定我的方法是否是最好的,因此,如果有AJAX和/JSON的替代方法,请随意推荐 我正在创建一个导游网站,注册用户将根据地区和州包括他们的度假村、餐厅和旅游景点。我在用Joomla!而Seblod则使用一些定制的PHP、MySQL、Javascript和AJAX。因为我不想手动创建27个动态选择,所以我一直在尝试使用PHP/AJAX/JSON/JQuery选择度假胜地和旅游景点必须关联的

你好,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=选择,u=URL以获得AJAX JSON结果-我已经在代码中的问题处进行了注释:

` 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', }); } ` 感谢您的时间和耐心,我不是这方面的专家,也不是新手,但很接近….

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

当你改变它时,它就起作用了

更新:


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

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

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

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

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

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

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

谢谢大家抽出时间,并对给您带来的不便表示歉意

我不得不向响应页面添加htmlentities,因为accents返回null,尽管我在每个文件上都显式地使用UTF-8