2016-06-20 2 views
0

У меня есть код Javascript, который преобразует числовое значение в его числовое имя (например, от 120 до Сто двадцать).Javascript code работает при запуске без сервера, но не работает (частично) при запуске на сервере?

Когда я открываю веб-страницу и пытаюсь использовать ее локально, она работает должным образом (скриншоты ниже).

, но когда я запускаю его на любом сервере (http-сервере, таком как Wamp или mangoose или github.io), результат не такой, как ожидалось. Он вставляет слово «undefined» между ними.

Screenshot when running locally

Вы можете увидеть код на https://github.com/saurabhshri/pathology

Javascript код находится в script.js, а вызывается в index.html

EDIT1: Видимо, я не могу опубликовать более одна ссылка. Поэтому я просто привязываю свою ссылку github, где вы можете увидеть весь код и попробовать сами.

EDIT2: Вот код JS отвечает за преобразование:

var a = ['','one ','two ','three ','four ', 'five ','six ','seven ','eight ','nine ','ten ','eleven ','twelve ','thirteen ','fourteen ','fifteen ','sixteen ','seventeen ','eighteen ','nineteen ']; 
 
var b = ['', '', 'twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety']; 
 

 
function inWords (num) { 
 
    if ((num = num.toString()).length > 9) return 'overflow'; 
 
    n = ('000000000' + num).substr(-9).match(/^(\d{2})(\d{2})(\d{2})(\d{1})(\d{2})$/); 
 
    if (!n) return; var str = ''; 
 
    str += (n[1] != 0) ? (a[Number(n[1])] || b[n[1][0]] + ' ' + a[n[1][1]]) + 'crore ' : ''; 
 
    str += (n[2] != 0) ? (a[Number(n[2])] || b[n[2][0]] + ' ' + a[n[2][1]]) + 'lakh ' : ''; 
 
    str += (n[3] != 0) ? (a[Number(n[3])] || b[n[3][0]] + ' ' + a[n[3][1]]) + 'thousand ' : ''; 
 
    str += (n[4] != 0) ? (a[Number(n[4])] || b[n[4][0]] + ' ' + a[n[4][1]]) + 'hundred ' : ''; 
 
    str += (n[5] != 0) ? ((str != '') ? 'and ' : '') + (a[Number(n[5])] || b[n[5][0]] + ' ' + a[n[5][1]]) + 'only ' : ''; 
 
    return str; 
 
}

Вот когда выше JS код называется (последняя строка):

/* Update Invoice 
 
/* ========================================================================== */ 
 

 
function updateInvoice() { 
 
\t var total = 0; 
 
\t var cells, price, total, a, i; 
 

 
\t // update inventory cells 
 
\t // ====================== 
 

 
\t for (var a = document.querySelectorAll('table.inventory tbody tr'), i = 0; a[i]; ++i) { 
 
\t \t // get inventory row cells 
 
\t \t cells = a[i].querySelectorAll('span:last-child'); 
 

 
\t \t // set price as cell[2] * cell[3] 
 
\t \t price = parseFloatHTML(cells[2]);// * parseFloatHTML(cells[3]); 
 

 
\t \t // add price to total 
 
\t \t total += price; 
 

 
\t \t // set row total 
 
\t \t cells[4].innerHTML = price; 
 
\t } 
 

 
\t // update balance cells 
 
\t // ==================== 
 

 
\t // get balance cells 
 
\t cells = document.querySelectorAll('table.balance td:last-child span:last-child'); 
 

 
\t // set total 
 
\t cells[0].innerHTML = total; 
 

 
\t // set balance and meta balance 
 
\t cells[2].innerHTML = document.querySelector('table.meta tr:last-child td:last-child span:last-child').innerHTML = parsePrice(total - parseFloatHTML(cells[1])); 
 

 
\t // update prefix formatting 
 
\t // ======================== 
 

 
\t var prefix = document.querySelector('#prefix').innerHTML; 
 
\t for (a = document.querySelectorAll('[data-prefix]'), i = 0; a[i]; ++i) a[i].innerHTML = prefix; 
 

 
\t // update price formatting 
 
\t // ======================= 
 

 
\t for (a = document.querySelectorAll('span[data-prefix] + span'), i = 0; a[i]; ++i) if (document.activeElement != a[i]) a[i].innerHTML = parsePrice(parseFloatHTML(a[i])); 
 

 
\t document.getElementById("bwords").innerHTML = inWords (total); \t 
 
}

Вот HTML-код, в котором отображается результат:

<span style="font-size: 80%;">Amount in words : Rupees </span><span style="text-transform: capitalize;" style="font-size: 80%;"id="bwords"></span>

EDIT3: Код работает частично на то есть сервер для 250

Желаемая выход: Двести пятьдесят только

Обрезанный выпуск: Двадцать не определено Сто пятьдесят пять только

+2

Пожалуйста, прочитайте [Что-то на моем веб-сайте не работает. Могу ли я просто вставить ссылку на него?] (Http://meta.stackoverflow.com/questions/125997/something-on-my-web-site-doesnt-work-can-i-just-paste-a-link -в-она). Вопросы, зависящие от внешних ресурсов, которые нужно понимать, становятся бесполезными, когда внешний ресурс уходит или фиксируется. Создайте [SSCCE] (http://www.sscce.org/). – Quentin

+0

Хорошо, я сейчас отредактирую вопрос. –

+0

@Quentin Добавлены фрагменты кода. –

ответ

0

Вы обновляете локальную переменную a в функции updateInvoice(). Это также имя глобальной переменной, определенной в строке 242 в script.js, и указано в функции inWords(). Это вызовет проблемы. Я бы переименовал глобальные строки 242 и 254

+0

Это был преступник! Большое спасибо! Могу ли я спросить, как вы отследили его? –

+0

Я использовал отладчик javascript в Firebug. Я перешел через функцию 'inWords()' по очереди, и когда я увидел, что 'a' был interger, хотя я мог видеть, что он был определен как глобальный массив на несколько строк выше, я знал, что это, должно быть, было где-то изменилось. Настоящий урок здесь - изучить один из отладчиков HTML/Javascript. В большинстве браузеров есть один встроенный, а Firebug обычно доступен как расширение. –

+0

Хорошо! Урок выучен. Сейчас будет использовать Firebug. –

-1

Проверьте, есть ли у вас разрешения на выполнение Javascript. И проверьте, можете ли вы получить доступ к файлу из другого файла. В основном, такие проблемы возникают из-за проблем с разрешениями.

+0

Да. Он имеет как разрешения, так и доступ к файлу из другого файла. Код работает PARTIALLY на сервере. –

0

Это работает для меня на веб-сервере Apache. Однако я вижу несколько проблем в вашем HTML и Javascript, которые могут вызвать проблемы:

  1. У вас есть два элемента с идентификатором «invoice1». Это вероятный виновник, так как это тег, на который Javascript на самом деле пытается писать.
  2. На строке 57 вы должны поставить пробел между классом и определением href. <a style="float:right; position:absolute; right:25%;" class='no-print'href="javascript:void(0)" onclick="closeNav()">. На линии 142. Что-то подобное происходит на линии 142.
  3. Строка 89: Вы закрываете, что никогда не открывалось.
  4. Беспорядок закрывающих тегов, начинающийся с строки 157, начиная с синтаксической ошибки в теге div.

Возможно, сделайте себе крутой курс в Firebug, так как это имеет тенденцию находить многие из этих проблем для вас.

+0

На самом деле код, на котором записывается номер, равен document.getElementById ("bwords"). InnerHTML = inWords (всего); Он предназначен для тега с идентификатором «bwords». И это главная проблема, которую я испытываю. PS Я загляну в Firebug. –

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