使用参数作为局部变量的Ajax调用不起作用

时间:2016-12-27 10:34:58

标签: c# jquery asp.net .net ajax

我在后面的代码中定义了一个webMethod,如下所示。

 [System.Web.Services.WebMethod]
        public static string testCall(int qid, String answerContent)
        {
        log.Debug("this is call from jquery" + qid.ToString() + answerContent);

            return "true";
        }

我试图通过jquery中的ajax调用来调用此方法,如下所示。

<script>

         $(".submitBtn").click(function (e) {

             alert(this.id);
             var qID = this.id;

             $.ajax({
                 type: "POST",
                 url: '/default.aspx/testCall',
                 data: '{ "qid":' + qID + ', "answerContent":"test" }',
                 contentType: "application/json; charset=utf-8",
                 success: function () {

                 },
                 failure: function (response) {
                     alert("fail");
                 },
                 dataType: 'html'
             });
         });
          </script>

但这不起作用。

但是,我传递参数的硬编码值,如下所示,它可以正常工作。

 data: '{ "qid":"1234", "answerContent":"test" }'

var qID传递参数不起作用

2 个答案:

答案 0 :(得分:1)

您应该将此行用作:

data: '{ "qid": "' + qID + '", "answerContent":"test" }'

答案 1 :(得分:1)

不要手工组装JSON。你会被字符串中你没想到的字符所咬,你会错过分隔符等。

相反,请使用JSON字符串:

data: JSON.stringify({qid: qID, answerContent:"test"}),

如果ID值确实是一个数字(您将其作为int收到),则需要对其进行解析(因为this.id是一个字符串):

data: JSON.stringify({qid: +qID, answerContent:"test"}),
// ------------------------^

...但是您所说的硬编码示例使用了ID的字符串,所以......