如何使用jquery发送int类型参数
我正在构建一个使用jquery与网页通信的Web服务。 我想构建我的web服务,因此它是类型安全的,无需在服务器端执行转换。
如何从客户端发出ajax调用,使用jquery到期望int值参数的服务器。
编辑:我明白这是不可能的。 我用c#编写服务器端。 目前,Web服务支持来自客户端(js)和其他实用程序(其他c#程序)的调用。 我目前可以想到的最简单的解决方案是复制方法并将其签名更改为字符串,然后转换数据类型并调用方法,这次使用正确的数据类型。
是否有任何.net 4属性可以装饰我自动执行此操作的方法?
谢谢
我怕你不能。 使用请求发送的所有参数都是string类型。
您可以将参数作为编码的JSON发送。
假设一个对象
{"int":1}
urlencoded它是
%7B%22int%22%3A1%7D
发送请求至http://domain.org/params=%7B%22int%22%3A1%7D
在domain.org上解码它:
$params=json_decode($_GET['params']);
你会看到类型仍然是整数:
echo gettype($params->int);
但这也是服务器端转换(因为你需要解码JSON)。
关于超出的评论,这里有一个例子,表明它不是带口红的猪,尝试它,看看是否保留了类型:
Test
输出:
object(stdClass)#1 (4) { ["pig"]=> int(1) ["cow"]=> float(2.2) ["duck"]=> string(6) "donald" ["rabbit"]=> object(stdClass)#2 (1) { ["ears"]=> int(2) } }
这在我看来并不坏,这就是JSON被“发明”的原因,在应用程序之间交换数据。
出于安全原因 ,您仍应将所有值转换为服务器上的int 。
从客户端,只需传递一下,如script.php?id=2
$.get('script.php?id=2', function(data) { $('.result').html(data); alert('Load was performed.'); });
你永远不应该信任客户端数据 ,所以你必须检查服务器端的所有值 – 不这样做会导致安全漏洞。
此外,它无论如何都是无意义的,因为你可以将你的值视为你的JS代码中的int,float或其他任何东西(使用parseInt(),parseFloat()…),但是当向服务器发送请求时,这会丢失 – 参数没有关于发送到服务器的数据类型的任何信息,因此它们都被视为字符串(并且,根据您的服务器,转换为接收时的预期值)
这取决于您在服务器端使用的语言。 有些语言会自动输入,有些则不会。 例如,PHP会将类似?id = 1的内容转换为int类型,而我相信ruby将保持字符串值,除非您明确地将其转换为int。
不幸的是,您不能保证从javascript发送的内容本身就是任何类型,而不是具体说明服务器上的结果是什么语言。 您可以使用每个值发送类型参数,但您仍需要validation它们在服务器端实际匹配。