我的JavaScript代码几乎不是一个Ajax请求,它要求从后端返回XML.后端可以execute_callback作为XML标签之一返回,如下所示:
<?xml version="1.0" encoding="windows-1251"?>
<response>
<execute_callback>
<function_name>someFunction</function_name>
</execute_callback>
</response>
Run Code Online (Sandbox Code Playgroud)
只要你知道这个callback预期的参数数量,一切都会好的.但如果后端已经返回怎么办?
<?xml version="1.0" encoding="windows-1251"?>
<response>
<execute_callback>
<function_name>someFunction</function_name>
<param>10.2</param>
<param>some_text</param>
</execute_callback>
<execute_callback>
<function_name>otherFunction</function_name>
<param>{ x: 1, y: 2 }</param>
</execute_callback>
</response>
Run Code Online (Sandbox Code Playgroud)
我现在如何将参数10.2和'some_text'传递给someFunctionJSON {x:1,y:2} otherFunction?
我知道一个丑陋的解决方案(使用函数arguments),但我正在寻找一个漂亮的解决方案.
在我忘记之前:不要为我解析XML - 我可以自己解决这个问题:)我需要的只是一些技巧,可以将任意数量的参数传递给JavaScript中的函数.如果您了解Python,我想要:
def somefunc(x, y):
print x, y
args = { 'x' : 1, 'y' : 2 }
somefunc(**args)
Run Code Online (Sandbox Code Playgroud)
但在JavaScript中.
您可以将它们全部传递到您的函数中:
function someFunction(){
for(i = 0; i < arguments.length; i++)
alert(arguments[i]);
}
Run Code Online (Sandbox Code Playgroud)
Javascript函数有一个类似于数组的参数对象,使用任意数量的参数调用javascript函数在语法上是正确的.
someFunction(1, 2, 'test', ['test', 'array'], 5, 0);
Run Code Online (Sandbox Code Playgroud)
是对该函数的有效调用.
你可以参考Function.apply.假设回调函数在全局对象中声明(window在浏览器中).
var callback_function = window[function_name];
if (callback_function) { // prevent from calling undefined functions
callback_function.apply(window, params); // params is an array holding all parameters
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4340 次 |
| 最近记录: |