如何优化和/或简化jQuery和PHP的交互?
我有一个使用jQuery和AJAX与PHP文件交互的HTML页面,我想改进和实现一些东西。如何优化和/或简化jQuery和PHP的交互?
我加载<select>
-boxes以前的回复<select>
-box。所以我做了一个简单的函数来保存一些代码。那就是:
$(document).ready(function(){
$("#sex").click(function(){
getPHPdata("sex", "age");
});
$("#age").click(function(){
getPHPdata("age", "work");
});
$("#work").click(function(){
getPHPdata("work", "country");
});
$("#country").click(function(){
getPHPdata("country", "city");
});
function getPHPdata(oASelect, oFSelect) {
$("#" + oFSelect).empty();
$.ajax({
type: 'POST',
url: 'loadselect.php',
data: 'id=' + encodeURIComponent(oASelect) + "&p=" + encodeURIComponent($("#" + oASelect).val()),
dataType: 'json',
success: function(data){
for (var i = 0; i < data.length; i++) {
$("#" + oFSelect).append("<option>" + data[i] + "</option>");
}
}
});
};
});
那么,在这个代码中,我只有四个<select>
-boxes,但我会需要使用至少八(全部采用相同的父上面的代码)。有什么方法可以优化或保存更多代码?
我的第二个问题是:
当由PHP文件返回的数组的长度只有一个元素,那么它会调用它的单击事件的功能,并装载下一个<select>
-box因为用户只能选择该选项。
我不知道怎么什么更好的方式来做到这一点,becouse如果我在PHP文件控制它,那么我不知道如何发送的HTML 文件响应并对其进行处理。
我希望我的解释清楚。任何帮助,建议或例子,将不胜感激。如果您需要更多详细信息,请告诉我,我将编辑该帖子。
1问题: 使用HTML5数据属性,只要您使用HTML5 ......
<select data-name='work' data-target='country' ...>
<option...></option>
</select>
然后在JS
$('select').on('click', function() {
getPHPData($(this).data('name'), $(this).data('target'));
});
第二个问题:
我不确定触发“变更”事件的方式,特别是因为我不确定你是否绑定它而不是“点击”,但我看了一下这个主题: Trigger change() event when setting <select>'s value with val() function
我认为这段代码应该可以工作,如果没有,对我说,我会尝试一个JSFiddle。
function getPHPdata(oASelect, oFSelect) {
$("#" + oFSelect).empty();
$.ajax({
type: 'POST',
url: 'loadselect.php',
data: 'id=' + encodeURIComponent(oASelect) + "&p=" + encodeURIComponent($("#" + oASelect).val()),
dataType: 'json',
success: function(data) {
if (data.length == 1) {
// It is a bit difficult to choose the right way for changing a select automatically,
// I would suggest you to take a look at this:
// https://stackoverflow.com/questions/5760873/trigger-change-event-when-setting-selects-value-with-val-function
$("#" + oFSelect).append("<option>" + data[0] + "</option>").val(data[0]).trigger('click');
} else {
for (var i = 0; i < data.length; i++) {
$("#" + oFSelect).append("<option>" + data[i] + "</option>");
}
}
},
error: function (response) {
// Manage any error here
}
});
};
真的非常感谢!好的解决方案第一个问题解决!第二个呢? – harrison4 2013-04-20 19:28:19
哦耶对不起,我正在编辑:) – 2013-04-20 19:54:12
我认为你可以用这种方式尝试一些东西(请参阅编辑过的文章),我不确定要触发的事件以及选择唯一可用的方法选项自动,但关于其他线程,它应该工作! – 2013-04-20 20:04:02
您可以添加一些数据属性并绑定select上的所有事件! – 2013-04-20 19:15:11