2016-08-30 4 views
0

Я работаю над окном app (winjs) с шаблоном навигации, все, что я пытаюсь сделать, - это когда я открываю приложение на странице home.html, список претендентов/кандидатов должен быть загружен. вот мой код, над которым я работал. но это агония меня Foreach неопределенWinJS «forEach» Undefined

(function() { 
"use strict"; 

WinJS.UI.Pages.define("/pages/startpage/startpage.html", { 
    // This function is called whenever a user navigates to this page. It 
    // populates the page elements with the app's data. 
    ready: function (element, options) { 
     // TODO: Initialize the page here. 
     var titlesListGrouped = new WinJS.Binding.List().createGrouped(
      function (i) { return i.ApplicantName.charAt(0).toUpperCase(); }, 
      function (i) { return { firstLetter: i.ApplicantName.charAt(0).toUpperCase() }; } 
     ); 
     var list = q("#ApplicantListView").winControl; 
     list.itemDataSource = titlesListGrouped.dataSource; 
     list.itemTemplate = q("#ApplicantTemplate"); 
     list.groupDataSource = titlesListGrouped.groups.dataSource; 
     list.groupHeaderTemplate = q("#headertemplate"); 

     WinJS.xhr({ url: "http://localhost/applicants/processing/getapplicant.php", }) 
      .then(function (xhr) { 
       var applicants = JSON.parse(xhr.response).d; 
       applicants.forEach(function (i) { 
        var item = { 
         ApplicantId: i.ApplicantId, 
         ApplicantName: i.ApplicantName, 
         clickFunction: function (args) { WinJS.Navigation.navigate("/pages/details/details.html", item); } 
        }; 
        item.clickFunction.supportedForProcessing = true; 
        titlesListGrouped.push(item); 
       }); 
      }); 
    }, 

    unload: function() { 
     // TODO: Respond to navigations away from this page. 
    }, 

    updateLayout: function (element) { 
     /// <param name="element" domElement="true" /> 

     // TODO: Respond to changes in layout. 
    } 
});} 

, и код HTML

<section class="page-section" aria-label="Main content" role="main"> 
     <div id="headerTemplate" data-win-control="WinJS.Binding.Template"> 
      <div> 
       <p data-win-bind="innerText:firstLetter"></p> 
      </div> 
     </div> 
     <div id="ApplicantTemplate" data-win-control="WinJS.Binding.Template"> 
      <div data-win-bind="onclick:clickFunction"> 
       <div class="appId" data-win-bind="innerText:ApplicantId"></div><br /> 
       <div class="appName" data-win-bind="innerText:ApplicantName"></div> 
      </div> 
     </div> 
     <div id="ApplicantListView" 
      data-win-control="WinJS.UI.ListView"></div> 
    </section> 

и это мой PHP, который генерирует данные JSon

<?php 

header('Allow-Control-Allow-Origin:*'); 

$database = mysqli_connect('localhost','root','','tech_m'); 
$query = "SELECT * from `applicant_table`"; 
$rs = mysqli_query($database, $query); 

while($assoc = mysqli_fetch_assoc($rs)){ 
    //echo "Access Granted"; 
    $ApplicantId = $assoc['app_id']; 
    $ApplicantName = $assoc['app_name']; 

    $rows[] = array('ApplicantId' =>$ApplicantId ,'ApplicantName' =>$ApplicantName); 
} 
$response['rows'] = $rows; 
$encodedfile = json_encode($response); 
echo $encodedfile; ?> 

пожалуйста, если кто-то может помочь в этом, это было бы большой помощью.

+0

Для 'JSON.parse (xhr.response) .d', почему существует' .d' часть? Это ошибка ввода? –

+0

[я следил за этим примером] (http://www.codefoster.com/win8pagenav/) @ ElvisXia-MSFT –

ответ

0

вот мой код, над которым я работал. но он меня бросает. Для Each не определено.

С вашего php-кода вы возвращаете объект Json: $response['rows'] = $rows;.

Таким образом, объект JSON имеет строки свойств, которые представляют собой массив. Но в ваших JS-кодах, , вы извлекаете аранжировку, используя JSON.parse(xhr.response).d, в которой не было объекта d.

Чтобы устранить эту проблему, вы можете просто изменить var applicants=JSON.parse(xhr.response).d; к ниже кодов:

var applicants = JSON.parse(xhr.response).rows; 

Я проверил ссылку вас в курсе. Он не говорил о том, как выглядит dataSource. Поэтому я думаю, что JSON.parse(xhr.response).d - это массив данных в этом блоге.

+0

[попробуйте эту ссылку, это говорит о d] (http://www.codefoster.com/netflixstage1) @ ElvisXia-MSFT –

+0

, если я пытаюсь получить json-формат данных, тогда он выдает ошибку forEach, когда я пытаюсь получить XML-формат данных, все работает нормально, но снова проблема повышается, он не связывает ссылку с div –

+0

Все право, я понимаю. Не могли бы вы отладить 'заявителей', которые исходят от' JSON.parse (xhr.response) .d; 'посмотреть, что внутри. Я думаю, 'JSON.parse (xhr.response) .d.rows' может работать. –

Смежные вопросы