[РЕШЕНО] Извлечь функцию из функции
Нет больше моих сил. Нужна помощь.
Дано функция: 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, время: 21:44. |