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', }); } `
感谢您的时间和耐心,我不是这方面的专家(不完全是新手,但是很接近......)。
答案 0 :(得分:2)
urldecode
不是javascript函数,
您可以使用decodeURIComponent
代替它。
当你改变它时它会起作用,
<强>更新强>
我认为你的问题是尝试对重音字符进行编码,如果所有编码都设置为UTF-8,它应该在不编码的情况下工作。
答案 1 :(得分:1)
这是一种常见的JSON解析无提示错误。
如果JSON格式不正确,则ajax请求将无提示失败。
此问题的第二个最常见原因是编码。确保在调用AJAX的页面和返回数据的脚本中使用UTF-8。
重音数据的问题可以通过不对服务器端的数据进行编码来解决,因此无需在客户端进行解除。
答案 2 :(得分:0)
回答我自己的问题: 由于我不是和AJAX / JSON专家,我不知道它是否是预期的行为,但是生成AJAX结果的响应页面不能具有与预期不同的数据。由于我留下了区域的输出,请求页面在某种程度上处理它有问题。删除不必要的数据后,选择列表就更新了。
这是我在帖子中忘记提及的内容,因为我认为在页面中有多个结果是好的。使用Firebug检查代码,请求正常。
感谢大家的时间,对此给您带来的不便表示歉意......
我必须在响应页面中添加htmlentities,因为重音符号返回null,尽管我在每个文件上明确地都有UTF-8 ...