2011-08-31 39 views
2

我想将JavaScript变量的内容传递给服务器进行处理。我可以传递静态字符串没有问题,但是当我传递一个包含字符串的变量时,WebMethod不会被调用。这里是我的代码: (客户端)jQuery.ajax“数据”参数语法

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"); 
    } 

,如果我尝试的数据: “{送出数据: ”OK“}”,将WebMethod被调用和返回一个响应。我的语法错了吗?

+0

在这里工作: http://stackoverflow.com/questions/7262940/webmethod-not-being-called- – Seraph812

回答

3

您不必将它作为字符串传递。由于ID是一个JavaScript变量,因此您必须传递其值。当你传递数据为"{sendData: ID}"时,它不会通过ID的值。

试试这个

data: { sendData: ID } 
+0

@ Seraph812 - Hope this h爱上你。 – ShankarSangoli

+0

这似乎不起作用,虽然它确实让我在其他地方发现了错误。在javascript中稍作修改后,我现在存储了正确的值。 var ID = cols.firstElementChild.defaultValue; 但是,服务器端Web方法仍未被调用。我注意到,如果我注释掉“contentType”和“dataType”行,客户端的“成功”语句被调用。 “ID”包含实际上是GUID的隐藏字段的字符串值(但存储时是字符串)。服务器端webmethod需要一个字符串。 – Seraph812

+0

你做了什么修改?你的意思是你仍然在传递'data:“{sendData:ID}”'它可以工作吗? – ShankarSangoli

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); } 
}) 
+0

现在看起来好像正确的数据,但服务器端web方法仍然没有被调用。我注意到,如果我注释掉“contentType”和“dataType”行,客户端的“成功”语句被调用。 “ID”包含实际上是GUID的隐藏字段的字符串值(但存储时是字符串)。服务器端webmethod需要一个字符串。 – Seraph812

+0

您应该删除contentType行,因为您没有将数据作为json发送(您只是以json的身份接收数据)或者可以在数据周围添加jQuery.getJSON() –

0

由于您使用jQuery的运行这些测试的答案:

var ID = 45; 

var x = "{sendData: ID}"; 

alert(jQuery.isPlainObject(x)); // false 

var y = { sendData: ID}; 

alert(jQuery.isPlainObject(y)); // true 

这里是的jsfiddle:

http://jsfiddle.net/3ugKE/

0

您正在传入'ID'作为字符串而不是变量。 您只需删除数据对象的引号即可。

进一步阅读JSON和JavaScript对象:

http://www.json.org/

http://www.w3schools.com/js/js_objects.asp

+0

看起来好像正确的数据现在就位,但服务器端web方法仍未被调用。我注意到,如果我注释掉“contentType”和“dataType”行,客户端的“成功”语句被调用。 “ID”包含实际上是GUID的隐藏字段的字符串值(但存储时是字符串)。服务器端webmethod需要一个字符串。 – Seraph812

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); } 
    })