Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   проблема с JSON объектом в AJAX запросе (https://javascript.ru/forum/jquery/12982-problema-s-json-obektom-v-ajax-zaprose.html)

jura4x01 11.11.2010 15:35

проблема с JSON объектом в AJAX запросе
 
function choose(id){
        $("#data").html('');
        $.ajax({
            type: "POST",
            url: "/ajax/"+id.substring(0, id.lastIndexOf('_')),
            cache: false,
            data: "q="+$("#"+id+"_title").val(),
            dataType: 'json',
            timeout: 10000,
            error: function() {$("#data").append('');},
            success: function(data){
                if (data.a !== undefined) {
                    $.each(data.a, function(i, obj) {                        
                            $("#data").append('<div>'+obj.info+'</div>');
                    });
                }
                else if (data.b[0] !== undefined) {
                    $.each(data.b, function(i, obj) {
                        $("#data").append('<div><b>'+obj.title+'</b></br><font color="#a0a0a0">'+obj.info+'</font></div>');
                    });
                }
                $("#data").show();
                $("#data div").click(function(){                    
                    var i = $("#data div").index(this);
                    insert(i,id,data);                        
                }); 
                var i = 0; 
                $("input:text").keypress(function(e){
                    id = $(this).next().attr('id');
                    if (e.keyCode == '13') {
                        if ($("#data").html() !== '') {
                            if ($("#data").children().get(0).tagName == "DIV")
                                insert(i,id,data);
                            else {
                                $("#data center").remove();
                                $("#data").hide();
                                $("#"+id+"_title").focus();
                                clear(id);
                            }                           
                        } 
                        return false;
                    }                   
                });
            }
        });
        return false;
    }

проблема в том, что после первого запроса данные data кэшируются. а хотя запрос всегда приходит новый, в функции выбора применяются старые данные. в чем может быть суть проблемы?

Skipp 11.11.2010 15:46

я обычно даже не думая уже к урлу добавляю рандомное число, не пробовал?

micscr 11.11.2010 15:51

да, какого вида url ?
Я вообще всегда к php обработчику отправляю запросы, никаких проблем не встречал.

jura4x01 11.11.2010 16:02

url, как вы видите, содержит переменную. сервер обрабатывает запрос в зависимости от этой переменной. в ней содержится имя базы, из который сервер должен достать соответствующие значения. так что random отпадает :(

от PHP я отказался согласно требованию заказчика.

ps.причем эта проблема имеет место только в случае события keydown. если совершать выбор по событию click - все функционирует должным образом. возможно дело в переменных, передаваемых функциям. но только как это проверить...

Skipp 11.11.2010 16:06

Цитата:

так что random отпадает
url: "/ajax/"+id.substring(0, id.lastIndexOf('_')),

поменяй на
url: "/ajax/"+id.substring(0, id.lastIndexOf('_'))+"?r="+Math.random(),


Цитата:

но только как это проверить
echo $_POST[... и смотри что сервер возвращает.

Kolyaj 11.11.2010 16:38

post-запросы не кэшируются, к ним не обязательно случайный параметр добавлять

jura4x01 01.12.2010 15:40

решил проблему с помощью глобальной переменной, в которую запихиваю JSON данные, полученные по запросу.


Часовой пояс GMT +3, время: 07:02.