我想将参数发送到webservice。该参数需要是一个变量而不是一个固定的字符串。当我编写以下代码时,webservice被称为正常并且执行得很好。
$(document).ready(function() {
$.ajax({
type: "POST",
url: "JsonTestService.asmx/Test",
data:"{'url':'http://www.cramster.com'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert(msg.d);
}
});
});
但是当我将行更改为以下x是变量时,它不起作用。你能告诉我如何在下面的代码中将变量传递给webservice。
data:"{'url':x}",
答案 0 :(得分:3)
你真的很亲密。不要将数据元素值括在引号中,即:
$(function() {
var dynamic_url = "http://www.example.com";
$.ajax({
type: "POST",
url: "JsonTestService.asmx/Test",
data: {
url: dynamic_url
},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert(msg.d);
}
});
});`
通过将整个批次括在引号中,表达式根本没有被评估。我还建议使用两种语法来传入对象。我认为它更清楚。
答案 1 :(得分:2)
您必须引用整个JSON字符串的原因:
在向他们发出的请求中,ASP.NET AJAX脚本服务和页面方法理解并期望将参数序列化为JSON字符串。这些参数从POST数据中解析出来,并用作您调用的方法的参数。
但是,如果您直接提供JSON对象作为$ .ajax调用的数据参数,jQuery会将对象序列化为一系列要对其进行POST的k,v对,而不是将原始JSON传递给您的Web服务。
如果您有兴趣,请在this post on common pitfalls when using jQuery with ASP.NET AJAX web services and page methods中提供更多详细信息。
您可能也对using a stringify method to make constructing the JSON string much cleaner感兴趣。
答案 2 :(得分:1)
以下内容应该有效:
$(document).ready(function() {
var x = 'http://www.cramster.com';
$.ajax({
type: "POST",
url: "JsonTestService.asmx/Test",
data: { 'url': x },
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert(msg.d);
}
});
})
您需要丢失data
参数附近的引号。
答案 3 :(得分:1)
根据jquery文档将完整的json作为字符串是正确的,获取x值的明显解决方案是:
data:"{\"url\":\"" + x + "\"}",