[РЕШЕНО] Извлечь функцию из функции
Нет больше моих сил. Нужна помощь.
Дано функция:
function someFunc(somevar) {
somevar = typeof(somevar) != 'undefined' ? somevar : 100;
$.ajax({
url: 'index.php',
type: 'post',
data: 'somevar=' + somevar,
dataType: 'json',
success: function(json) {
// smth
}
}
});
}
Задача: получить функцию $.ajax как объект или строку для последующего внесения изменений. Дополнительное условие: нельзя редактировать первоначальную функцию. Я так понимаю, что единственный способ решить такую головоломку, это взять someFunc как строку и разбить регулярным выражением, отредактировать, а потом собрать обратно. Но у меня упорно не получается написать регулярку для извлечения $.ajax( .. ). Спсибо, что дочитали. Любые идеи приветствуется. |
Цитата:
var str="function someFunc(somevar) { "
str=str+"somevar = typeof(somevar) != 'undefined' ? somevar : 100; "
str=str+"$.ajax({ "
str=str+"url: 'index.php', "
str=str+"type: 'post', "
str=str+"data: 'somevar=' + somevar, "
str=str+"dataType: 'json', "
str=str+"success: function(json) { "
str=str+"// smth "
str=str+"} "
str=str+"} "
str=str+"}); "
str=str+"} "
alert(str.replace(/(\$\.ajax\(\{[\s\S]+\}\);)/gm,'test'));
|
1.Внутри ajax одна '}' -лишняя
2.
function someFunc(somevar) {
somevar = typeof(somevar) != 'undefined' ? somevar : 100;
$.ajax({
url: 'index.php',
type: 'post',
data: 'somevar=' + somevar,
dataType: 'json',
success: function(json) {
// smth
//}
}
});
}
var str=someFunc.toString();
alert('$.ajax'+str.split('$.ajax')[1].split('})')[0]+'})');
|
Спасибо, я со скобочками сам справился)
function someFunc(somevar) {
somevar = typeof(somevar) != 'undefined' ? somevar : 100;
$.ajax({
url: 'index.php',
type: 'post',
data: 'somevar=' + somevar,
dataType: 'json',
success: function(json) {
// smth
//}
}
});
}
var addToCart_string = addToCart.toString();
addToCart_string = addToCart_string.match(/(\$\.ajax\(\{[\s\S]+\}\);)/gm);
// теперь у меня есть строка с ajax запросом
// который надо отредактировать
// черещ new Function не получилось и через eval тоже
// по ходу надо распарсить строку и получить параметры
// а потом отъявить
var myNewFunction = $.ajax(params);
Вот тут я сейчас ломаю голову и ищу какой-то готовый инструмент для синтаксического анализа строки. |
function someFunc(somevar) {
somevar = typeof(somevar) != 'undefined' ? somevar : 100;
$.ajax({
url: 'index.php',
type: 'post',
data: 'somevar=' + somevar,
dataType: 'json',
success: function(json) {
// smth
//}
}
});
}
var somevar='somevar';
var str=someFunc.toString();
var pp='var pars='+str.split('$.ajax(')[1].split('})')[0]+'}';eval(pp);for(var u in pars)alert(u+'='+pars[u]);
|
Почему бы просто не переопределить функцию someFunc?
|
Цитата:
vadim5june, нетривиально и сыро, но буду разбираться. Спасибо большое. |
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<script>
function someFunc(somevar) {
somevar = typeof(somevar) != 'undefined' ? somevar : 100;
$.ajax({
url: 'index.php',
type: 'post',
data: 'somevar=' + somevar,
dataType: 'json',
success: function(json) {
// smth
//}
}
});
}
var somevar='somevar';
var str=someFunc.toString();
var parameters = 'var pars='+str.split('$.ajax(')[1].split('})')[0]+'}'; eval(parameters);
var paramsArray = {};
for (var u in pars) {
if (u && pars && u) {
paramsArray[u]=pars[u];
}
}
var my_ajax_funciton_now = $.ajax(someFunc); // это провал. зараза выполняет вместо того, чтобы присваивать.
console.log(my_ajax_funciton_now );
</script>
</body>
</html>
|
Цитата:
Грамматика JS там в примерах есть, а вот лексем вроде нету. Но найти можно если сильно захотеть. |
насколько я понимаю нужно изменить значения внутри ajax и переопределить функцию someFuns
тогда так
<!DOCTYPE html>
<head>
<script
src="http://code.jquery.com/jquery-1.9.1.js">
</script>
</head>
<body>
<script>
function someFunc(somevar) {
somevar = typeof(somevar) != 'undefined' ? somevar : 100;
$.ajax({
url: 'index.php',
type: 'post',
data: 'somevar=' + somevar,
dataType: 'json',
success: function(json) {
}
});
};
var somevar='somevar';
var str=someFunc.toString();
var str0=str.split('$.ajax(')[0];
var stre=')}';
var parameters = 'var pars='+str.split('$.ajax(')[1].split('})')[0]+'}'; eval(parameters);
var paramsArray = {};
for (var u in pars) {
if (u && pars && u) {
paramsArray[u]=pars[u];//здесь переопределяем значения
}
}
;
pp=str0+'$.ajax('+JSON.stringify(paramsArray)+stre;
eval(pp);
console.log(someFunc.toString() );
</script>
</body>
</html>
|
| Часовой пояс GMT +3, время: 03:00. |