我有一个wcf服务运行,其中包含一个返回字符串的方法。我能够成功地在浏览器中运行该服务。此外,我甚至可以传递所需的参数,并可以在浏览器中查看结果。
但是当我尝试从javascript客户端调用相同的方法时,参数值不会传递给方法,因此它不返回任何内容。
以下是我的服务从浏览器运行时返回的内容
这是我的界面实施:
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
string JSONData(string id);
这是我的服务方法实现代码:
public string JSONData(string id)
{
if (id == null || id == "")
{
return "Id is null";
}
else
{
return "You requested product " + id;
}
}
如上所示,服务工作正常,从网址传递参数。但是,当我使用jquery的函数参数进行调用时,没有传递这是我的javascript客户端代码:
<script type="text/javascript">
// A $( document ).ready() block.
$(document).ready(function () {
// alert("pass");
var valu = "123";
$("#btnclick").click(function () {
debugger;
$.ajax({
cache: false,
type: "GET",
async: false,
url: "http://localhost:35798/RestServiceImpl.svc/JSONData",
data: JSON.stringify(valu),
contentType: "application/json",
dataType: "json",
success: function (result) {
var ans = JSON.stringify(result);
alert("success");
alert(ans);
},
error: function (xhr) {
alert("error");
alert(xhr.responseText);
}
});
});
});
</script>
我希望能够从jquery代码传递参数。任何建议让这项工作真的很感激。
答案 0 :(得分:1)
值必须是一个关键值对:
var valu = {id:"123"};
或字符串:
var value = 'id="123"';
目前正在形成正确的请求。
在第一种情况下将其作为普通JavaScript对象传递,不要对其进行字符串化。如果你这样做,jquery会将它作为一个字符串附加到请求中。
使用浏览器中的网络调试工具解决这些问题。
这会将您的查询字符串正确序列化为/JSONData?id=123
,而不是生成/JSONData/"123"
的解决方案
您的代码有编辑...
<script type="text/javascript">
// A $( document ).ready() block.
$(document).ready(function () {
// alert("pass");
var valu = {id: "123"};
$("#btnclick").click(function () {
debugger;
$.ajax({
cache: false,
type: "GET",
async: false,
url: "http://localhost:35798/RestServiceImpl.svc/JSONData",
data: valu,
contentType: "application/json",
dataType: "json",
success: function (result) {
var ans = JSON.stringify(result);
alert("success");
alert(ans);
},
error: function (xhr) {
alert("error");
alert(xhr.responseText);
}
});
});
});
</script>