PHP и ajax обновлений не происходит - PullRequest
3 голосов
/ 26 апреля 2010

У меня есть запрос ajax, который выглядит следующим образом:

$('input.fakecheck').click(function(){
alert("deleteing....");
$.ajax({
    url:"/search",
    type:"POST",
    data: $(this).attr('name')+"="+$(this).attr('value')+"&remove=Remove",
    success:function() {
        alert(data);
    }
})

})

Это вызывает функцию php, которая выглядит следующим образом,

private function _remove_from_short_list($cv_array)
    {
        if (is_array($cv_array))
        {
            $short_list = $this->session->userdata('short_list');
            $new_list = array_diff_key($short_list, $cv_array);
            $this->session->set_userdata('short_list', $new_list);

        }
    }

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

Ответы [ 5 ]

2 голосов
/ 26 апреля 2010

Обычно вы хотите запустить что-то в функции успеха, чтобы изменить список.

Скажи, если у тебя была такая структура

<ul>
    <li>
        <input id="1" type="checkbox" class="fakecheck" />
    </li>
    <li>
        <input id="2" type="checkbox" class="fakecheck" />
    </li>
</ul>

В функции успеха вы можете удалить li после удаления

$(this).parent().remove()

Это явно не учитывает обработку ошибок в запросе AJAX. Если бы вы могли опубликовать HTML-код для своего списка, я бы также лучше почувствовал структуру, которую вы пытаетесь изменить.

Как упоминает Pointy, вы должны быть уверены, что ваш запрос к серверу действительно удалил элемент, если вы собираетесь изменить список на месте, вместо того, чтобы получать обновленный список.

0 голосов
/ 27 апреля 2010

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

Похоже, вы создаете страницу с помощью PHP, то есть PHP генерирует HTML, в который добавлен поведенческий слой с помощью JavaScript. Если вы реализуете свою собственную версию флажка, который должен обновляться, убедитесь, что вы позаботились об обновлениях пользовательского интерфейса в JavaScript (обратный вызов функции ajax.success) после завершения HTTP-запроса.

Мое личное предложение: уберите компоновку страницы из PHP и позвольте JavaScript делать это вместо этого, будь то при загрузке страницы или при ответе на запрос Ajax, и позвольте PHP сделать что-то более простое, например, вернуть список идентификаторы текущей сессии, которые должны быть проверены.

0 голосов
/ 26 апреля 2010

вместо обновления страницы, вы можете вызвать в JS вторую функцию для обновления HTML в браузере. отправьте идентификатор цели и HTML-код, который выводит PHP, на функцию, подобную этой:

function  HandleResponse(response, target)
{
  document.getElementById(target).innerHTML = response;
}
0 голосов
/ 26 апреля 2010

Если это приемлемо, вы можете просто обновить страницу в функции успеха javascript.

0 голосов
/ 26 апреля 2010

Что ж, вам придется отправить обратно обновленную версию списка, а затем сделать что-то с этим в вашей функции «успеха». Вы могли бы сделать так, чтобы код на стороне клиента (Javascript) предпринял соответствующее действие, но, вероятно, для сервера лучше отослать обновление, потому что сервер находится там, где «реальность» живет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...