2009-12-14 44 views
0

我想通过我的回调函数的多个参数,不知道是谁做的这场比赛JS-回调函数....NET语法有多个参数

这将是C#代码:

 Response.Clear(); 
     Response.ContentType = "text/plain"; 
     Response.Write("content of param1"); 
     Response.Write("content of param2"); 
     Response.End(); 

和JS代码:

$.getJSON("localhost/myFunction", dataString, 
     function(param1, param2) { 
      alert(param1); 
      alert(param2); 
     }); 

我将如何执行的C#代码参数的实际映射,这样的JavaScript将它们识别为两个参数的回调函数? (具体我想传递一个JSON对象和这里“状态”参数...)

回答

0

有一个正确的方法来做到这一点,我相信你会发现它很方便,所以我会告诉你,而不是劈开你的工作:

创建一个web服务文件(a smx)在您的网站。在创建的cs(或vb)文件中,在类声明的上方,有一个ScriptService属性被注释掉。取消注释,以便您可以从脚本访问服务。

创建一个返回对象中的值的新方法(匿名类型将执行)。注意WebMethod属性:

[WebMethod] 
public object MyFunction() { 
    return new { 
     status = "Status string", 
     jsobj = new { 
      childParam = "complex object", 
      childArray = new[] { "holds", "any", "values", "convertible", "to", "js" } 
     } 
    }; 
} 

现在,您可以使一个AJAX调用此方法,从你的代码,就像这样:

$.ajax({ 
    type: 'POST', 
    url: 'MyService.asmx/MyFunction', 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    data: '{}', 
    success: function(res) { 
     alert(res.status); 
     alert(res.jsobj.childParam); 
    } 
}); 

这样,.NET会照顾JSON序列为你不需要担心你的返回值等字符溢出

0

发送参数作为JSON编码对象:

Response.ContentType = "application/json"; 
Response.Write("{ param1: 'value1', param2: 'value2' }"); 

而且在javascript:

$.getJSON('localhost/myFunction', dataString, 
    function(json) { 
     alert(json.param1); 
     alert(json.param2); 
}); 
+0

不,一个参数应该是类型“字符串”,另一个类型“json”...“字符串”参数应该指示json对象是否为“有效” – David 2009-12-14 09:29:08

+0

如果由se发送的JSON rver无效,它甚至不会调用成功回调。你也可以像这样构造一个对象:'{param1:'valid',param2:{p1:'foo',p2:'bar'}}' – 2009-12-14 09:33:25

+2

@David:我不认为你已经理解了响应。参数的值不一定是字符串,尽管它们在你的例子中。您传递给'getJSON'的匿名回调函数被'getJSON'函数调用*,并且不会篡改您的响应会影响'getJSON'传递给您的回调函数的参数数量。 – 2009-12-14 09:34:02