Результаты XML JQuery не так, как ожидалось - PullRequest
0 голосов
/ 24 мая 2011

У меня есть скрипт jquery, который ищет php-файл, который создает XML-файл.Пример файла XML приведен здесь

            <sites>
            <name>Ascot Racecourse</name>
            <address1>Berkshire</address1>
            <postcode>SL5 7JX</postcode>
            <name>Aston Villa Football Club</name>
            <address1>Villa Park</address1>
            <postcode>B6 6HE</postcode>
            <name>Asda 1 Year Celebration</name>
            <address1>Park In Ipswich</address1>
            <postcode>IP</postcode>
            <name>ASDA FULWOOD</name>
            <address1>ASDA FULWOOD</address1>
            <postcode>ASDA</postcode>
            <name>ASDA TEST 5</name>
            <address1>ASDA TEST 5</address1>
            <postcode>ASDA TES</postcode>
            <name>ASDA 50</name>
            <address1>ASDA 50</address1>
            <postcode>ASDA 50</postcode>
            </sites>

Мой сценарий JQ работает нормально и получает все данные, используя следующую команду:

          $(document).ready(function(){ 
          $.ajax({
          type: "GET", 
          url: "search_action.php" + string ,
          dataType: "xml",
          success: disxml                                                  });
            })

       } // function 

      function disxml(data){

      $(data).find('sites').each(function(row) {  
                  var name    = $(this).find('name').text(); 
                  var add1    = $(this).find('address1').text(); 

                  display +=   "<b>" + name + "</b> - " + add1  + "<br>"   ;


                  })

      divbox.html(display) ; // draw contents 
      } 

Я счастлив проверить файл XML в браузере, чторезультат в порядке, НО проблема в значении переменной 'display'. Я ожидаю упорядоченного списка с разрывом строки после каждого имени и адреса в XML-файле, но я получаю ВСЕ имена, за которыми следуют ВСЕ адреса.Я считаю, что скрипт работает через цикл и должен делать то, что я хочу, но он просто не

, если это помогает, это значение 'display'

Ascot RacecourseAston Villa Football ClubAsda 1Празднование годаASDA FULWOODASDA TEST 5ASDA 50-BerkshireVilla ParkPark In IpswichASDA FULWOODASDA TEST 5ASDA 50

Может кто-нибудь сказать мне, что я делаю неправильно, пожалуйста?

Заранее спасибо

Мик

1 Ответ

3 голосов
/ 24 мая 2011

Это потому, что вы делаете следующее:

$(data).find('sites').each(function(row) {  
   var name    = $(this).find('name').text(); 
   var add1    = $(this).find('address1').text(); 

   display +=   "<b>" + name + "</b> - " + add1  + "<br>"   ;
})

Вы перебираете каждый узел sites, один из которых существует, и получаете ВСЕ узлы имени внутри него, а затем получаете текст ВСЕХ этих узлов. Для того, чтобы он работал так, как вы ожидаете, вам придется изменить свой XML, например:

<sites>
   <site>
      <name>Ascot Racecourse</name>
            <address1>Berkshire</address1>
            <postcode>SL5 7JX</postcode>
   </site>
   <site>
      <name>Aston Villa Football Club</name>
            <address1>Villa Park</address1>
            <postcode>B6 6HE</postcode>
   </site>
   <!-- etc... -->
</sites>

И сделайте следующее:

$(data).find('sites').find('site').each(function(row) {  
   var name    = $(this).find('name').text(); 
   var add1    = $(this).find('address1').text(); 

   display +=   "<b>" + name + "</b> - " + add1  + "<br>"   ;
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...