@kostarus61

Не работает функция JS, ошибка TypeError: re_anwer.exec(...) is null. Кто знает почему?

Добрый день уважаемые программисты.
Возникла следующая проблема.

Есть JS скрипт:
<script type="text/javascript">
var min = 1;
function calculate() {
    var re = /[^0-9\.]/gi;
    var url = window.location.href;
    var desc = $('#desc').val();
    var sum = $('#sum').val();
    if (re.test(sum)) {
        sum = sum.replace(re, '');
        $('#oa').val(sum);
    }
    if (sum < min) {
        $('#error').html('Сумма должна быть больше '+min);
        $('#submit').attr("disabled", "disabled");
        return false;
    } else {
        $('#error').html('');
    }
    if (desc.length < 1) {
        $('#error').html('Необходимо ввести номер заявки');
        return false;
    }
    $.get(url+'?prepare_once=1&l='+desc+'&oa='+sum, function(datart) {
         var re_anwer = /<hash>([0-9a-z]+)<\/hash>/gi;
         $('#s').val(re_anwer.exec(datart)[1]);
         $('#submit').removeAttr("disabled");
    });
}
</script>


Он отвечает за обработку формы оплаты, проверяет введена ли сумма и номер ордера а также формирует строку с хэш. Так вот этот скрипт прекрасно работает на хостинге и на Денвер если его закинуть просто в отдельном файле, к примеру по адресу http:// mydomen.com/test.php, но если его внедрить на страницу сайта где он должен быть то скрипт работает на половину, т.е. проверка введенных данных в форму выполняется, а далее он останавливается на $('#s').val(re_anwer.exec(datart)[1]);. Консоль браузера показывает ошибку TypeError: re_anwer.exec(...) is null.

Явно какой то конфликт скриптов. Пробовал отключать все скрипты сайта оставил только jquery.min.js, который нужен для работы данного скрипта, ничего не помогает.

Какие еще могут быть причины, почему не работает данный скрипт?
  • Вопрос задан
  • 2510 просмотров
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Причина одна — в результате выполнения exec совпадений не найдено и потому вернулся null. А вы запрашиваете у null первый элемент, как будто это — массив.

var result = /<hash>([0-9a-z]+)<\/hash>/gi.exec(datart);
if (result) {
	$('#s').val(result[1]);
	$('#submit').removeAttr("disabled");
}


Вообще вам бы неплохо смотреть, что приходит и пытаться выполнить метод с конкретной строкой ответа. Для этого нужно всего лишь нажать на F12 и открыть вкладку «Сеть».
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@kostarus61 Автор вопроса
Забыл там дописать код формирования хэша

$fk_merchant_id = '1234'; 
$fk_merchant_key = 'c54wgdfgd4';

if (isset($_GET['prepare_once'])) {
    $hash = md5($fk_merchant_id.":".$_GET['oa'].":".$fk_merchant_key.":".$_GET['l']);
    echo '<hash>'.$hash.'</hash>';
    exit;
}


В коде самого скрипта по сути ошибки быть не может так как тот же самый скрипт без изменений работает на том же хостинге если его закинуть просто по адресу mydomen.com/test.php,
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы