Ответ AJAX, который я не могу понять

#php #jquery #ajax

#php #jquery #ajax

Вопрос:

У меня есть 2 вопроса :

Если я отправлю ajax-запрос на собственную страницу (с abc.php для abc.php ) вот так :

 $.ajax({
   type: "POST",
   url: "some.php",
   data: "name=Johnamp;location=Boston",
   success: function(msg){
     alert( "Data Saved: "   msg );
   }
 });
  

Что будет msg содержать переменная, если у меня будет полная веб-страница (с div, формами, изображениями)? Будет ли он содержать весь исходный код html? Как указать ajax возвращать только определенные детали (как, например, php $variable после запроса к базе данных записи на основе Name и Location ). Помните some.php это тот же файл, который содержит ajax-скрипт.

Я хочу создать php-скрипт, который содержит все возможные запросы для управления базой данных, подобной этой:

 if(isset($_GET['option']) amp;amp; $_GET['option'] == 'insert') { code here .. and echo div`s .. etc) }
if(isset($_GET['option']) amp;amp; $_GET['option'] == 'del') { code here .. and echo div`s .. etc) }
if(isset($_GET['option']) amp;amp; $_GET['option'] == 'update') { code here .. and echo div`s .. etc) }
if(isset($_GET['option']) amp;amp; $_GET['option'] == 'find') { code here .. and echo div`s .. etc) }
if(isset($_GET['option']) amp;amp; $_GET['option'] == 'abc') { code here .. and echo div`s .. etc) }
  

и я хочу запустить ajax-запрос на основе option и повторно получить конкретные результаты (например, php $ variables … и так далее)

Как мне это сделать?

В любом случае, самый важный вопрос заключается в том, как мне получить ajax.result, который содержит только php $variable или $array , если страница, которая получает запрос ajax, уже содержит <html><body><divs><tables><h4><h3>.... etc ?

Потому что jquery.ajax() имеет документацию, довольно сложную по таким параметрам, как accepts, async, complete, contentType, context .. and so on .

?

Большое спасибо.

Ответ №1:

Вы можете использовать параметр DataType, чтобы указать тип данных, которые вы ожидаете получить обратно с сервера. В вашем случае JSON может быть хорошим вариантом, поскольку страница php может возвращать строку в виде:

   {name:value}
  

это легко обработать как объект JSON на клиенте.

например, найдено на этой странице

  $.ajax({
   url: url,
   dataType: 'json',
   data: data,
   success: callback
 });
  

Затем ваша функция обратного вызова обработает JSON и извлекет значение. Как вы можете видеть по ссылке, вы можете использовать метод getJSON () в качестве ярлыка.

Комментарии:

1. Я понял это .. но, допустим, я хочу запросить со страницы, на которой много html. Как мне запросить только то, что values содержится в div с определенным id or class ? Страница, для которой я хочу использовать ajax, генерирует массивный html…

2. Вы не можете. Вам нужно написать отдельную страницу, которая будет возвращать только то, что вы хотите. В качестве альтернативы вы можете поместить некоторые условные операторы на страницу, чтобы условно возвращать нужные вам данные.

3. В качестве альтернативы вам, возможно, придется проанализировать возвращенный html, но это, ваааай, слишком хлопотно и неэффективно

4. Уф, я понимаю, что теперь .. да, разбирать html с jquery.find() и восстанавливать весь html-код не очень практично..

Ответ №2:

Переменная ответа msg будет содержать полный HTML страницы, которую вы запросили. Чтобы вместо этого получить переменную php, вам нужно упаковать переменную так, чтобы ее мог понять javascript, что обычно означает сериализацию объекта / переменной в формате json, а затем использование $.parseJSON или eval вкл msg для преобразования результирующей строки в объект / массив javascript.

Комментарии:

1. тогда, я думаю, dataType будет json ? Не могу ли я получить только содержимое определенного <div id='id_no'> ? Я полагаю, что единственный способ сделать это — получить весь html, а затем добавить к нему jquery.find() ?

2. вы можете это сделать. просто сделайте так, чтобы ваш php-скрипт выводил только содержимое <div id=’id_no’> на основе некоторого условия ввода

Ответ №3:

Ответ таков: не делайте ajax-запрос на страницу, которая уже содержит <html><body etc, Используйте страницу без этого материала.

Все, что вам нужно, это

 echo $variable;