2012-03-28 67 views
0

不知道我在做什么错,但我无法让我的JQuery AJAX调用正确地传递变量。它收到它很好。我可能忽略了一些小事。谢谢。无法将变量从JQuery AJAX传递到后面的C​​#代码

(此外,有没有什么办法可以这种方式传递数据,而无需使用[的WebMethod]或通过网址?)

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Untitled Page</title> 
    <script src="Scripts/jquery-1.7.1.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(function() { 
      $('#button').click(function(){ 
      var json_obj = "{'" + $('#t1').val() + "' : '" + $('#p1').val() + "', '" + $('#t2').val() + "' : '" + $('#p2').val() + "'}"; 

       $.ajax({ 
        type: "POST", 
        url: 'Default.aspx/test', 
        contentType: 'application/json; charset=utf-8', 
        data: "thisisatest",//json_obj, 
        dataType: 'json', 
        success: function(msg) { 
        //$('#result').html(msg.d); 
         alert(msg.d) 
        }, 
        error: function(msg) { 
        //$('#result').html(msg.d); 
         alert(msg.d + " err") 
        } 
       }); 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <div> 
     Type: 1: <input type="text" id="t1" /> 
     Property 1: <input type="text" id="p1" /> 
     <br /><br /> 
     Type 2: <input type="text" id="t2" /> 
     Property 2: <input type="text" id="p2" /> 
     <input type="button" value="Add object!" id="button" /> 
     <br /><br /> 
     <div id="result"></div> 
    </div> 
</body> 
</html> 

代码隐藏

[WebMethod] 
    public string test(string json) 
    { 
     return json; 
    } 
+2

第一:数据:“thisisatest”不是JSON 第二:显示您的代码如何接收和填充请求对象。 – Quintium 2012-03-28 16:03:16

+0

我知道“thisisatest”不是JSON,我将JSON注释掉,以便用简单的字符串进行测试,因为它不起作用。不确定你对第二部分的含义。 – Ber53rker 2012-03-28 16:06:14

回答

2

这里有一个完整的例子我为你写来说明这一概念:在同一个Default.aspx文件

<%@ Page Language="C#" %> 
<%@ Import Namespace="System.Web.Services" %> 
<script type="text/C#" runat="server"> 

    public class MyModel 
    { 
     public string T1 { get; set; } 
     public string P1 { get; set; } 
     public string T2 { get; set; } 
     public string P2 { get; set; } 
    } 

    [WebMethod] 
    public static string Test(MyModel obj) 
    { 
     return "Hello from test"; 
    } 
</script> 

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
    Type: 1: <input type="text" id="t1" /> 
    Property 1: <input type="text" id="p1" /> 
    <br /><br /> 
    Type 2: <input type="text" id="t2" /> 
    Property 2: <input type="text" id="p2" /> 
    <input type="button" value="Add object!" id="button" /> 
    <br /><br /> 
    <div id="result"></div> 

    <script src="scripts/jquery-1.4.1.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $('#button').click(function() { 
      var data = JSON.stringify({ 
       obj: { 
        t1: $('#t1').val(), 
        p1: $('#p1').val(), 
        t2: $('#t2').val(), 
        p2: $('#p2').val() 
       } 
      }); 
      $.ajax({ 
       url: 'default.aspx/test', 
       type: 'POST', 
       contentType: 'application/json', 
       data: data, 
       success: function(result) { 
        $('#result').html(result.d); 
       } 
      }); 
      return false; 
     }); 
    </script> 
</body> 
</html> 

我的代码背后这里混合和标记,但很明显,你可以有,如果你喜欢它们分开。

+0

哇。这工作真棒。谢谢! – Ber53rker 2012-03-28 16:44:46

+0

你知道我是否可以动态生成模型? – Ber53rker 2012-03-28 16:53:15

+0

你是什么意思*动态*?你的场景是什么?您需要将什么值发送到服务器?如果动态地指你的集合,那么你完全可以拥有集合对象的复杂属性,并在其中包含可变数量的元素。 – 2012-03-28 16:53:53

2

的WebMethods必须是静态的!

http://encosia.com/why-do-aspnet-ajax-page-methods-have-to-be-static/

[WebMethod] 
public static string test(string json) 
{ 
    return json; 
} 

和你的JSON输入应该是:

var jsonInput = { 'json': 'XXXXXXX'}; 

其中 'JSON' 等于将WebMethod参数

,并在阿贾克斯函数的名称

data:JSON.stringify(jsonInput) 
+0

它给我的AJAX错误,并没有达到该代码。但是,谢谢。 – Ber53rker 2012-03-28 16:08:33

+0

@ Ber53rker什么ajax错误?无论如何,如果webmethod不是静态的,它将无法正常工作 – giammin 2012-03-28 16:17:29

+0

当我点击按钮时,它会显示“undefined err” – Ber53rker 2012-03-28 16:24:19

1

您可以更改方法获取和价值附加到像这样的网址...

$.ajax({ 
    type: "GET", 
    url: 'Default.aspx/test?json=' + 'thisisatest', 
    contentType: 'application/json; charset=utf-8', 
    success: function(msg) { 
      //$('#result').html(msg.d); 
      alert(msg.d) 
    }, 
    error: function(msg) { 
      //$('#result').html(msg.d); 
      alert(msg.d + " err") 
    } 
}); 
在后面的代码

然后....

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.ContentType = "application/json; charset=utf-8"; 
    Response.Write(Request["json"]); 
} 

如果你要尽管如此,我建议不要使用Code Behinds,因为他们必须处理整个ASP.NET Web Forms页面生命周期。你最好使用ASP.NET处理程序(ashx)。

祝你好运!