24.02.2012, 09:06
|
Аспирант
|
|
Регистрация: 21.11.2008
Сообщений: 52
|
|
Обработка массива, ajax
Здравствуйте!
С помощью .ajax получаю php массив, не подскажете как его обработать?
Нужно в цикле посмотрить option'ы
Вот такой массив:
Array ( [result] => Array ( [173] => Санкт-Петербург [174] => Александровская [175] => Бокситогорск [176] ))
Вот так получаю:
$('.setCity').change(function()
{
var shop_location_id = $(this).val();
$.ajax({
type: "GET",
url: "/address/",
data: "action=city&shop_location_id="+ shop_location_id,
success: function(res){
var options = '';
// вот здесь нужно в цикле построить option'ы
// пример: <option value = "173">Санкт-Петербург</option>
}
});
});
Подскажите пожалуйста.
Спасибо
|
|
24.02.2012, 11:59
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
а на кой вы на клиент php массив передаёте, javascript не умеет работать с php массивами.
преобразуйте ваш массив в формат json и передайте его на клиент именно в этом формате.
собственно нужна то одна строчка на стороне сервера.
echo json_encode ( $myArray );
=================================
На клиенте распарсить данные можно
var dat=jQuery.parseJSON(res).
а потом работайте с dat как с массивом.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 24.02.2012 в 12:05.
|
|
24.02.2012, 12:23
|
Аспирант
|
|
Регистрация: 21.11.2008
Сообщений: 52
|
|
Сообщение от DjDiablo
|
а на кой вы на клиент php массив передаёте, javascript не умеет работать с php массивами.
преобразуйте ваш массив в формат json и передайте его на клиент именно в этом формате.
собственно нужна то одна строчка на стороне сервера.
echo json_encode ( $myArray );
|
Спасибо вам. А не подскажете как в цикле сделать option'ы?
Данные теперь такие:
{"558":"\u0411\u0430\u0431\u0430\u0435\u0432\u043e","559":"\u0411\u0435\u043b\u043e\u0437\u0435\u0440\u0441\u043a","560":"\u0412\u0435\u043b\u0438\u043a\u0438\u0439 \u0423\u0441\u0442\u044e\u0433","561":"\u0412\u0435\u0440\u0445\u043e\u0432\u0430\u0436\u044c\u0435","562":"\u0412\u043e\u0436\u0435\u0433\u0430","563":"\u0412\u043e\u043b\u043e\u0433\u0434\u0430","564":"\u0412\u043e\u0445\u0442\u043e\u0433\u0430","565":"\u0412\u044b\u0442\u0435\u0433\u0440\u0430","566":"\u0413\u0440\u044f\u0437\u043e\u0432\u0435\u0446","567":"\u041a\u0430\u0434\u043d\u0438\u043a\u043e\u0432","568":"\u041a\u0430\u0434\u0443\u0439","569":"\u041a\u0438\u0447\u043c\u0435\u043d\u0433\u0441\u043a\u0438\u0439 \u0413\u043e\u0440\u043e\u0434\u043e\u043a","570":"\u041b\u0438\u043f\u0438\u043d \u0411\u043e\u0440","571":"\u041d\u0438\u043a\u043e\u043b\u044c\u0441\u043a","572":"\u041d\u044e\u043a\u0441\u0435\u043d\u0438\u0446\u0430","573":"\u0421\u043e\u043a\u043e\u043b","574":"\u0421\u044f\u043c\u0436\u0430","575":"\u0422\u0430\u0440\u043d\u043e\u0433\u0441\u043a\u0438\u0439 \u0413\u043e\u0440\u043e\u0434\u043e\u043a","576":"\u0422\u043e\u0442\u044c\u043c\u0430","577":"\u0423\u0441\u0442\u044e\u0436\u043d\u0430","578":"\u0425\u0430\u0440\u043e\u0432\u0441\u043a","579":"\u0427\u0430\u0433\u043e\u0434\u0430","580":"\u0427\u0435\u0440\u0435\u043f\u043e\u0432\u0435\u0446","581":"\u0428\u0435\u043a\u0441\u043d\u0430","582":"\u0428\u0443\u0439\u0441\u043a\u043e\u0435"}
$('.setCity').change(function()
{
var shop_location_id = $(this).val();
$.ajax({
type: "GET",
url: "/address/",
data: "action=city&shop_location_id="+ shop_location_id,
success: function(res){
var options = '';
// вот здесь нужно в цикле построить option'ы
// пример: <option value = "173">Санкт-Петербург</option>
}
});
});
|
|
24.02.2012, 12:53
|
Профессор
|
|
Регистрация: 01.02.2010
Сообщений: 364
|
|
$('.setCity').change(function()
{
var shop_location_id = $(this).val();
$.ajax({
type: "GET",
url: "/address/",
data: "action=city&shop_location_id="+ shop_location_id,
dataType : 'json',
success: function(res){
var options = [];
for ( var value in res ) {
if ( res.hasOwnProperty( value ) ) {
options.push( 'value="' + value + '">' + res[ value ] );
}
}
alert('<option ' + options.join('</option><option ') + '</option>';)
// вот здесь нужно в цикле построить option'ы
// пример: <option value = "173">Санкт-Петербург</option>
}
});
});
|
|
24.02.2012, 13:32
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
namez,
Вариант ...
<!DOCTYPE >
<html>
<head>
<title></title>
</head>
<body>
<select name="lang1" ></select>
<script type="text/javascript">
var res = {
"558": "\u0411\u0430\u0431\u0430\u0435\u0432\u043e",
"559": "\u0411\u0435\u043b\u043e\u0437\u0435\u0440\u0441\u043a",
"560": "\u0412\u0435\u043b\u0438\u043a\u0438\u0439 \u0423\u0441\u0442\u044e\u0433",
"561": "\u0412\u0435\u0440\u0445\u043e\u0432\u0430\u0436\u044c\u0435",
"562": "\u0412\u043e\u0436\u0435\u0433\u0430",
"563": "\u0412\u043e\u043b\u043e\u0433\u0434\u0430",
"564": "\u0412\u043e\u0445\u0442\u043e\u0433\u0430",
"565": "\u0412\u044b\u0442\u0435\u0433\u0440\u0430",
"566": "\u0413\u0440\u044f\u0437\u043e\u0432\u0435\u0446",
"567": "\u041a\u0430\u0434\u043d\u0438\u043a\u043e\u0432",
"568": "\u041a\u0430\u0434\u0443\u0439",
"569": "\u041a\u0438\u0447\u043c\u0435\u043d\u0433\u0441\u043a\u0438\u0439 \u0413\u043e\u0440\u043e\u0434\u043e\u043a",
"570": "\u041b\u0438\u043f\u0438\u043d \u0411\u043e\u0440",
"571": "\u041d\u0438\u043a\u043e\u043b\u044c\u0441\u043a",
"572": "\u041d\u044e\u043a\u0441\u0435\u043d\u0438\u0446\u0430",
"573": "\u0421\u043e\u043a\u043e\u043b",
"574": "\u0421\u044f\u043c\u0436\u0430",
"575": "\u0422\u0430\u0440\u043d\u043e\u0433\u0441\u043a\u0438\u0439 \u0413\u043e\u0440\u043e\u0434\u043e\u043a",
"576": "\u0422\u043e\u0442\u044c\u043c\u0430",
"577": "\u0423\u0441\u0442\u044e\u0436\u043d\u0430",
"578": "\u0425\u0430\u0440\u043e\u0432\u0441\u043a",
"579": "\u0427\u0430\u0433\u043e\u0434\u0430",
"580": "\u0427\u0435\u0440\u0435\u043f\u043e\u0432\u0435\u0446",
"581": "\u0428\u0435\u043a\u0441\u043d\u0430",
"582": "\u0428\u0443\u0439\u0441\u043a\u043e\u0435"
};
var a = document.getElementsByName("lang1")[0]
for (var c in res) a.options[a.options.length] = new Option(res[c],c );
</script>
</body>
</html>
|
|
24.02.2012, 13:44
|
Профессор
|
|
Регистрация: 07.06.2011
Сообщений: 315
|
|
красиво =)
|
|
24.02.2012, 14:29
|
Аспирант
|
|
Регистрация: 21.11.2008
Сообщений: 52
|
|
рони спасибо.
А я обработал так, не знаю какой метод лучше, показался более по-jquery'вски
success: function(res){
var options = '';
$.each(res, function(key, val){
options += '<option value="' + key + '">' + val + '</option>';
});
$("select").html(options);
}
Последний раз редактировалось namez, 24.02.2012 в 14:34.
|
|
25.02.2012, 09:47
|
Аспирант
|
|
Регистрация: 21.11.2008
Сообщений: 52
|
|
Друзья подскажите. У меня в массиве новый параметр. city (в конце)
{"result":{"210":"\u041f\u0443\u0448\u043a\u0438\u043d","211":"\u0421\u0435\u0441\u0442\u0440\u043e\u0440\u0435\u0446\u043a","212":"\u0421\u043b\u0430\u043d\u0446\u044b","213":"\u0421\u043e\u0441\u043d\u043e\u0432\u044b\u0439 \u0411\u043e\u0440","214":"\u0422\u0438\u0445\u0432\u0438\u043d","215":"\u0422\u043e\u0441\u043d\u043e","216":"\u0428\u043b\u0438\u0441\u0441\u0435\u043b\u044c\u0431\u0443\u0440\u0433"},"city":"\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433"}
Сейчас я обрабатываю {result} так:
success: function (res)
{
var selected = res.city;
$.each(res.result, function (key, val)
{
// здесь нужно сделать условие, если val = selected то <option selected=selected>
options += '<option value="' + key + '">' + val + '</option>';
});
}
А как сделать так чтобы при проверке если val = selected то такой option будет иметь атрибут selected=selected ?
|
|
25.02.2012, 10:24
|
Server
|
|
Регистрация: 26.09.2011
Сообщений: 252
|
|
ну добавь ?:
options += '<option value="' + key + '" '+((val == selected)?'selected=selected':'')+'>' + val + '</option>';
|
|
25.02.2012, 10:29
|
Аспирант
|
|
Регистрация: 21.11.2008
Сообщений: 52
|
|
Сообщение от Rootpassword
|
ну добавь ?:
options += '<option value="' + key + '" '+((val == selected)?'selected=selected':'')+'>' + val + '</option>';
|
Спасибо! Да я так и делал, только что-то ошибки лезли в фаербаге, я уже и так и так подумал что не судьба. Понял ошибку. Спасибо еще раз!
|
|
|
|