【问题标题】:Calling a C# webmethod from Ajax从 Ajax 调用 C# 网络方法
【发布时间】:2017-03-16 17:10:44
【问题描述】:

我正在尝试从 ajax 调用服务器端函数,但一直收到此错误

无效的 Web 服务调用,缺少参数值:\u0027name\u0027。

这里是js代码

var obj = { name: name, company: company, country: country, email: email, msg: Msg }
var json = JSON.stringify(obj);
$.ajax({
    method: "GET",
    url: "ContactUs.aspx/SendEmail",
    contentType: "application/json; charset=UTF-8",
    data: json,
    dataType:"json",
    success: function (data) {
        var a = 3;
    },
    error:function(a,b){
        var a = 43;
    }
})

这里是 c# webmethod

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string SendEmail(string name, string company, string country, string email, string msg)
{
    return string.Empty;
}

js 和 c# vars 之间的名称相同,并且我的所有 vars 都有值。

提前致谢

【问题讨论】:

  • 您正在执行 POST 但该方法看起来像是 GET?
  • 没有。那是我想解决的问题,应该是 GET
  • Check this answer。传递整个对象。
  • 我认为你不需要对 obj 进行字符串化
  • 我认为 webmethod 必须是 POST。这是aspsnippets.com/Articles/… 的一个简单示例

标签: c# jquery asp.net ajax


【解决方案1】:
$.ajax({
    method: "GET",
    url: "ContactUs.aspx/SendEmail?name=" + name + "&company=" + company + "&country=" + "&email=" +email + "&msg=" + Msg,
    dataType: "application/json",
    success: function (data) {
        var a = 3;
    },
    error:function(a,b){
        var a = 43;
    }
}) ;

由于它是 GET 类型的请求,您需要在查询字符串中为 webmethod 参数传递所需的值。您不能为此使用 data 参数,因为 GET 类型的请求没有负载。

【讨论】:

  • 我认为 Akshey 可能是正确的。如果可能的话,我建议使用 POST 而不是 GET,以避免这种限制。一方面,一些 Web 服务器无法正确处理很长的 URL,因此如果 URL 中有大量数据,Web 服务器可能会截断它。
猜你喜欢
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 2011-12-09
  • 1970-01-01
相关资源
最近更新 更多