如何使用jquery发送int类型参数

如何使用jquery发送int类型参数,jquery,ajax,webservice-client,Jquery,Ajax,Webservice Client,我正在构建一个web服务,它将使用jquery与网页进行通信。 我想构建我的Web服务,使其类型安全,而不需要在服务器端执行转换 如何使用jquery从客户端向需要int值参数的服务器发出ajax调用 编辑: 我明白这是不可能的。我正在用c#对服务器端进行编程。 目前,web服务支持来自客户端(js)和其他实用程序(其他c#程序)的调用。我目前能想到的最简单的解决方案是复制方法并将其签名更改为字符串,然后转换数据类型并调用方法,这次使用正确的数据类型 是否有任何.NET4属性可以修饰自动执行此操

我正在构建一个web服务,它将使用jquery与网页进行通信。 我想构建我的Web服务,使其类型安全,而不需要在服务器端执行转换

如何使用jquery从客户端向需要int值参数的服务器发出ajax调用

编辑: 我明白这是不可能的。我正在用c#对服务器端进行编程。 目前,web服务支持来自客户端(js)和其他实用程序(其他c#程序)的调用。我目前能想到的最简单的解决方案是复制方法并将其签名更改为字符串,然后转换数据类型并调用方法,这次使用正确的数据类型

是否有任何.NET4属性可以修饰自动执行此操作的方法


谢谢

出于安全考虑,您仍然应该在服务器上将所有值转换为int。

从客户端,只需传递int,如
script.php?id=2

$.get('script.php?id=2', function(data) {
  $('.result').html(data);
  alert('Load was performed.');
});

恐怕你不能。随请求发送的所有参数都是字符串类型

您可以将参数作为编码的JSON发送

假设一个物体

{"int":1}
是的

%7B%22int%22%3A1%7D
向发送请求

在domain.org上对其进行解码:

$params=json_decode($_GET['params']);
您将看到类型仍然是整数:

echo gettype($params->int);
但这在某种程度上也是服务器端转换(因为需要解码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>

在我看来,这还不错,JSON就是为了在应用程序之间交换数据而“发明”的。

这取决于您在服务器端使用的语言。有些语言会自动键入cast,有些则不会。例如,PHP会将?id=1之类的东西转换为int类型,而我相信ruby会将其保留为字符串值,除非您显式地将其转换为int


不幸的是,如果不明确服务器上预期的结果是什么语言,就无法保证从javascript发送的内容本身是任何类型的。您可以将类型参数与每个值一起发送,但仍然需要验证它们在服务器端是否确实匹配。

您应该永远不要信任客户端数据,因此无论如何您都必须检查服务器端的所有值-不这样做将导致安全漏洞


此外,这是毫无意义的,因为您可以在JS代码中将值视为int、float或任何内容(使用parseInt()、parseFloat()…),但当向服务器发送请求时,这会丢失-参数没有任何关于发送到服务器的数据类型的信息,因此它们都被视为字符串(并且,根据您的服务器,在收到数据时转换为预期值)

您可能会遇到安全问题。这就是网站被黑客攻击的原因。您可以提供一些关于这种方法的安全问题的详细信息吗?@vondip,这取决于您对数据的处理方式,而不仅仅是提交“不符合逻辑”的数据值,如负数,如果不使用预处理语句,则sql注入只允许正数,并将该数据插入数据库,而无需检查感兴趣的方法,尽管这会为每个调用增加一些开销(即使非常简单)在我的脑海里,首要的问题是,参数的大小,取决于你必须发送的值的数量,很快就会划掉GET请求的限制。从某种意义上说,这是一个猪的口红,不是吗?没有什么能阻止某人恶意地编写一个JSON编码的字符串形式:代码“{int”:“或
{“字符串”:1}
。在一天结束时,您仍然需要检查该值是否为正确类型和有效值。如果服务器端代码正确地将无效的json字符串解码为某个有效值,这可能会很聪明。例如,将一个表示int的字符串转换为
1
或其他内容。只要您知道在这段代码中会发生什么在前面的例子中,这是一个简洁的解决方案。标签“int”与类型无关,如果您愿意,您可以使用
{“pig”:1}
,pig也将是integer类型。问题是关于保留类型,这就是我的答案。
object(stdClass)#1 (4) {
  ["pig"]=>
  int(1)
  ["cow"]=>
  float(2.2)
  ["duck"]=>
  string(6) "donald"
  ["rabbit"]=>
  object(stdClass)#2 (1) {
    ["ears"]=>
    int(2)
  }
}