2016-12-12 3 views
0

Я прошу HTML-страницу через Ajax.AJAX & JSON: применить tableToJSON() к данным, полученным через ajax

Эта страница содержит <table id="studentsTable" .., что я хочу, чтобы преобразовать в формат JSON с функцией tableToJSON():

$.ajax({ url:'https://domain.org/en/courses/1226/course_applications', 
    success: function(data) { 

     var $html = $(data); 
     var $table = $html.find('#studentsTable').parent(); 
     console.log($table.html()); //This prints correctly the <table>..contents..</table> 

     var tableJ = $table.tableToJSON(); 
     console.log(tableJ); //This prints Array[0] !! 
     } 
    }); 

Я делаю parent() вещь, потому что если нет, то <table> и </table> теги были отрублены.

Моя проблема заключается в том, что я новое в JQuery и, очевидно, я делаю что-то неправильно при вызовеtableToJSON()

Целью является, учитывая таблицу, как это:

<table border="1" id="studentsTable"> 
<thead> 
    <tr> 
     <th>Name</th> 
     <th>Surname</th> 
     <th>Age</th> 
     <th>Gender</th> 
     <th>Old</th> 
    </tr> 
</thead> 
<tbody> 
    <tr> 
     <td>John</td> 
     <td>Smith</td> 
     <td>40</td> 
     <td>M</td> 
     <td>N</td> 
    </tr> 
    <tr> 
     <td>Clare</td> 
     <td>Lander</td> 
     <td>34</td> 
     <td>F</td> 
     <td>Y</td> 
    </tr> 
</tbody> 

до получить объект JSON, подобный этому (для дальнейшей обработки в Chrome-extens ион бута это будет другой вопрос-;)

[ 
{ 
    "Name": "John", 
    "Surname": "Smith", 
    "Age": "40", 
    "Gender": "M", 
    "Old": "N" 
}, 
{ 
    "Name": "Clare", 
    "Surname": "Lander", 
    "Age": "34", 
    "Gender": "F", 
    "Old": "Y" 
} 
] 

Заранее спасибо за ваше терпение и терпимость!

ответ

1

Хотя tableToJSON должен быть какой-то пользовательской функции или плагин (не стандартный JQuery), так что трудно быть уверенным, тем не менее, я думаю, что ответ прост: У

var $table = $html.find('#studentsTable'); 

Использование .parent() поможет вам все, элемент над ним, который не будет таблицей. Я подозреваю, что если вы будете кормить что-то, что не является таблицей для метода tableToJSON, тогда он потерпит неудачу.

Причина вы не можете увидеть метки «таблицы», когда вы делаете console.log($table.html()); потому, что метод .html() печатает только внутренний HTML выбранного элемента - смотри пример в документации на http://api.jquery.com/html/. Я подозреваю, что это вводит вас в заблуждение, передавая неправильный элемент в вашу функцию.

+0

Скорее всего, ОП использует https://github.com/lightswitch05/table-to-json – Tomalak

+0

Уважаемый @ADyson, спасибо за ваш ответ. То, что вы предложили, имеет смысл, но теперь tableToJSON возвращает пустой массив: [] С другой стороны, да, Tomalak, tableToJSON требует дополнительную библиотеку: https://github.com/lightswitch05/table-to-json – Pakosis

+0

@Pakosis нет, когда Я запускаю его, это не так. Работает отлично. Убедитесь, что вы определенно передаете ему правильный элемент. Постскриптум Вы получите более читаемый результат, если вы выполните 'console.log (JSON.stringify (tableJ));' – ADyson

0

Наконец, после многих различных попыток, я нашел гуманный в this other SO answer, который я скопировать & вставить почему здесь. Как @Buzinas говорит:

это не работает, вероятно, это потому, что tableToJSON требует, чтобы элемент размещен внутри документа, чтобы работать. Вы должны временно добавить таблицу в документ, чтобы получить JSON, и сразу же удалить его, как только будет создан json.

Каким-то образом я знал, что, таким образом, я пытался что-то вроде этого

var table= $('#studentsTable', $(data)).tableToJSON(); 

в надежде обеспечить Differetn context к tableToJSON, но не работает (я не Nknow почему).
Я также осмелился отредактировать функцию IIFE tableToJSON внутри jquery.tabletojson.js исходного кода, но снова стал диким .. Хорошо, теперь я могу двигаться дальше!

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