von*_*dip 3 ajax jquery webservice-client
我正在构建一个使用jquery与网页通信的Web服务.我想构建我的webservice,因此它是类型安全的,无需在服务器端执行转换.
如何从客户端发出ajax调用,使用jquery到期望int值参数的服务器.
编辑:我明白这是不可能的.我用c#编写服务器端.目前,Web服务支持来自客户端(js)和其他实用程序(其他c#程序)的调用.我目前可以想到的最简单的解决方案是复制方法并将其签名更改为字符串,然后转换数据类型并调用方法,这次使用正确的数据类型.
是否有任何.net 4属性可以装饰我自动执行此操作的方法?
谢谢
我怕你不能.与请求一起发送的所有参数都是string类型.
您可以将参数作为编码的JSON发送.
假设一个对象
{"int":1}
Run Code Online (Sandbox Code Playgroud)
urlencoded它是
%7B%22int%22%3A1%7D
Run Code Online (Sandbox Code Playgroud)
发送请求至http://domain.org/params=%7B%22int%22%3A1%7D
在domain.org上解码它:
$params=json_decode($_GET['params']);
Run Code Online (Sandbox Code Playgroud)
你会看到类型仍然是整数:
echo gettype($params->int);
Run Code Online (Sandbox Code Playgroud)
但这也是一个服务器端转换(因为你需要解码JSON).
关于超出的评论,这里有一个例子,表明它不是带口红的猪,尝试它,看看是否保留了类型:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--
function request()
{
var obj={
"pig":1,
"cow":2.2,
"duck":'donald',
"rabbit":{"ears":2}
};
location.replace('?params='+encodeURIComponent(JSON.stringify(obj)));
}
//-->
</script>
</head>
<body>
<input type="button" onclick="request()" value="click">
<pre><?php
if(isset($_GET['params']) && $params=json_decode($_GET['params']))
{
var_dump($params);
}
?>
</pre>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
输出:
object(stdClass)#1 (4) {
["pig"]=>
int(1)
["cow"]=>
float(2.2)
["duck"]=>
string(6) "donald"
["rabbit"]=>
object(stdClass)#2 (1) {
["ears"]=>
int(2)
}
}
Run Code Online (Sandbox Code Playgroud)
这在我看来并不坏,这就是JSON被"发明"的原因,在应用程序之间交换数据.
| 归档时间: |
|
| 查看次数: |
22167 次 |
| 最近记录: |