2012-03-18 4 views
0

Я читаю некоторые номера из локального файла, а затем пытаюсь сортировать числа с помощью Javascript. Чтение выполняется с помощью ActiveXObject и сортировки с помощью javascript.сортировка чисел с помощью 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> 
+0

Не могли бы вы указать, что вы подразумеваете под «не работает»? Что происходит, когда вы запускаете код и как это отличается от того, что вы ожидаете? Вы получаете сообщение об ошибке? – Guffa

+0

Это проблема асинхронного поведения асинхронного кода, а не сортировка чисел. – jbabey

ответ

1

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

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

for (var i = 0; i < numbers.length; i++) numbers[i] = parseInt(numbers[i], 10); 
+0

спасибо Guffa.That помогли много –

1

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

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

+0

Спасибо Shocker –

0

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

EDIT: и Shocker это, конечно, прав.

+0

Пожалуйста, не обращайтесь в W3Schools, используйте либо ECMA-262 (онлайн-спецификация для [sort] (http://es5.github.com/#x15.4.4.11)) или MDN ([sort] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort)), которые являются авторитетными и информативными. – RobG

+0

Спасибо Rodolphe –

+0

Извините, RobG. Я забыл ... Но в любом случае метод существует. – Rodolphe

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