2016-04-23 4 views
0

Я использую веб-сервис, чтобы получить доступность гостиниц, но не могу получить ajax, чтобы показать результаты более чем одного. Мой метод определенно испорчен & slow - как лучше сделать?Ajax load from php with json parse

1) Код (упрощенно) вызывается для каждого отеля на странице списка 6-12 отелей: -

<script> 
$(document).ready(function(){ 
    $("#div<%=i%>").load("hotel-avail.php?id=xxyy"); 
}); 
</script> 

2) отель-avail.php ID = XXYY использует веб-сервиса, чтобы получить PHP массив? , $ result, определяя доступность отеля с id xxyy. Содержание раздела HTML: -

<script> 
var result = JSON.parse('<?php echo json_encode($result) ?>'); 
    if (result.hotels.estado == 'OK') { 
     document.getElementById("demo").innerHTML = "Yes"; 
    } else { 
     document.getElementById("demo").innerHTML = "No"; 
    } 
</script> 

Availability: <span id="demo"></span> 

Так что этот метод вводит данные дважды в 2-дивы, по одному в каждом файле. Помимо того, что вы выглядите плохо, и НЕ работает, это должен быть самый медленный путь к итерации через 6-12 гостиниц. Помоги пожалуйста!

+0

Непонятно, где второй тег сценария ... это ответ от 'hotel-avail.php'? Если это так, что вывод не имеет смысла, он будет выводить только фактический json и манипулировать им в html в обратном вызове ajax. – charlietfl

ответ

1

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

$.ajax({ 
    url: 'hotel-avail.php?id=xxyy', 
    method: 'post', 
    dataType: 'json', 
    success: function (result) { 

     if (result.hotels.estado == 'OK') { 
      document.getElementById("demo").innerHTML = "Yes"; 
     } else { 
      document.getElementById("demo").innerHTML = "No"; 
     } 
    } 
}); 

Это Ajax работает только с JQuery. забыл указать на это. Также вы можете изменить этот код:

document.getElementById("demo").innerHTML = "Yes"; 

для

$("#demo").html("Yes"); 
+0

Выглядит многообещающе, пока не работает после настройки URL-адреса. Так как это обрабатывает json в коде ajax выше (на странице списка отелей), предположительно html hotel-avail.php нуждается в изменении? Как убедиться, что ajax получает массив json с этой страницы? – Paul

+0

'dataType: 'json'' будет анализировать выход json из php, поэтому результат будет уже разобран в javascript, я полагаю, что PHP выполняет следующий« echo json_encode ($ result) » –

+0

Теперь получилось, что это результат 'массив json, созданный в hotel-avail.php? Успех: функция (результат) { if (result.hotels.estado == 'OK') { \t $ ("# div0"). Html ("Да"); } else { $ ("# div0"). Html ("Нет"); } Будет продолжать пытаться заставить эту версию работать как выглядит на правильном пути. – Paul

0

В случае полезной для других я подробно окончательный результат. Следуя идеям @ DAVID-lavieri, этот код работает для проверки наличия в гостинице один за другим через петлю и ввода значения в div0, div1 и т.д.: -

$.ajax({ 
    type: "GET", 
    url: 'hotel-avail.php', 
    data:'querystring defining data', 
    success: function(data){ 
     $("#div<%=i%>").html(data); 
    } 
    }); 

Чтобы приступить к работе, я удалил весь сценарий 2) hotel-avail.php (см. мою первоначальную запись выше) и заменен на «echo json_encode ($ result)»; в конце php-кодирования, вызывающего веб-сервис.

Это проверяет наличие по одному. Вероятно, это намного медленнее, чем получение всех доступных в одном веб-сервисе вызовов, а затем обновление каждого div. Следующий проект!