сортировка номеров с использованием JavaScript - PullRequest
0 голосов
/ 19 марта 2012

Я читаю некоторые числа из локального файла, а затем пытаюсь отсортировать числа с помощью Javascript. Чтение осуществляется с помощью ActiveXObject, а сортировка - с помощью javascript.

Когда я не использую ActiveX, сортировка может быть выполнена, но при наличии Activex она не работает. Существуют ли какие-либо ограничения на использование таких функций при наличии ActiveX. Если кто-то может сказать мне, где код должен быть изменен, я был бы благодарен.

Вот код.

<html>
<script>
var oRequest;
var i;
var numbers=new Array();
var b= new Array();
var j
var k;
var temp;
var temp1;

if(document.all) {
  oRequest = new ActiveXObject("Microsoft.XMLHTTP")
}
else {

  oRequest = new XMLHttpRequest();
}


oRequest.open("GET", "file:///C:/Test.txt", true);
oRequest.send(null);


numbers= oRequest.responseText.split("\n");


for(i=0;i<10;i++)
{
  for(j=0;j<9;j++)
  {
    if(numbers[j]>numbers[j+1])
    {
      temp=numbers[j+1];
      numbers[j+1]=numbers[j];
      numbers[j]=temp;
    }
  }}

document.write(numbers);
document.write("<br>");
</script>
</html> 

Ответы [ 3 ]

1 голос
/ 19 марта 2012

AJAX (ваш XMLHTTP ActiveXObject), в соответствии с его именем (асинхронный JavaScript и XML), выполняет запрос асинхронно, что означает, что он планирует запрос GET для вашего test.txt другим потоком и продолжает выполнениеостальная часть javascript в основном потоке.

Остальную часть javascript (сортировку) необходимо выполнять только ПОСЛЕ того, как AJAX-запрос завершен.Для этого вам нужно использовать событие onreadystatechange (информация здесь: http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp) и выполнять сортировку только тогда, когда readyState == 4 (4: запрос завершен и ответ готов) и статус == 200 (200: "OK ")

1 голос
/ 19 марта 2012

Массив numbers не содержит чисел, он содержит строки. Когда вы сравниваете их, они сравниваются как строки, а не числа.

Разобрать строки в массиве:

for (var i = 0; i < numbers.length; i++) numbers[i] = parseInt(numbers[i], 10);
0 голосов
/ 19 марта 2012

Разберите ваши строки, чтобы получить числа, а затем используйте метод sort: http://wap.w3schools.com/jsref/jsref_sort.asp

РЕДАКТИРОВАТЬ: И Шокер, конечно, прав.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...