我正在尝试将javascript变量的内容传递给服务器进行处理。我可以传递静态字符串没问题但是当我传递一个包含字符串的变量时,不会调用WebMethod。这是我的代码: (客户端)
function expand(checkbox)
{
var selectedrow = checkbox.parentNode.parentNode;
var rowindex = selectedrow.rowIndex;
var parent = document.getElementById("parentTable");
var NextRow = parent.rows[rowindex + 1];
var cols = selectedrow.cells[1];
var ID = cols.firstElementChild.attributes.value;
$.ajax({
type: "post",
url: "Playground.aspx/childBind",
data: "{sendData: ID}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) { alert("successful!" + result.d); }
})
NextRow.style.visibility = "visible";
}
(服务器)
[WebMethod]
public static string childBind(string sendData)
{
return String.Format("Hello");
}
现在,如果我要尝试数据:“{sendData:”ok“}”,WebMethod会被调用并返回响应。我的语法怎么错?
答案 0 :(得分:3)
您不必将其作为字符串传递。由于ID
是一个javascript变量,因此您必须传递其值。当您将数据作为"{sendData: ID}"
传递时,它不会传递ID
的值。
试试这个
data: { sendData: ID }
答案 1 :(得分:3)
您发送的是字符串而不是对象("{sendData: ID}"
而不是{sendData: ID}
)。您发送的数据不是JSON。因此,删除contentType行并更改数据行。你应该重写为:
$.ajax({
type: "post",
url: "Playground.aspx/childBind",
data: {sendData: ID},
dataType: "json",
success: function (result) { alert("successful!" + result.d); }
})
如果你想发送JSON:
,你也可以写这个$.ajax({
type: "post",
url: "Playground.aspx/childBind",
data: $.getJSON({sendData: ID}),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (result) { alert("successful!" + result.d); }
})
答案 2 :(得分:0)
因为您正在使用jQuery运行这些测试以获得答案:
var ID = 45;
var x = "{sendData: ID}";
alert(jQuery.isPlainObject(x)); // false
var y = { sendData: ID};
alert(jQuery.isPlainObject(y)); // true
这是jsFiddle:
答案 3 :(得分:0)
您将'ID'作为字符串而不是变量传递。 您需要做的就是删除数据对象周围的引号。
进一步阅读JSON和javascript对象:
答案 4 :(得分:0)
您可以使用此代码:
$.ajax({
type: "post",
url: "Playground.aspx/childBind",
data: JSON.stringify({sendData: ID}),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) { alert("successful!" + result.d); }
})