调用ASMX时Ajax未定义错误

时间:2014-06-21 13:17:40

标签: c# jquery ajax

<html>
<script src="json.js";/>
<script src = "jquery.js"/>
<script type="text/javascript">
    function PopulateBlendSpecification() {


    var data = new Object();
    data.Message = "message";
    alert(JSON.stringify(data));
    $.ajax({
        url: "Test.aspx/Test",
        type: "POST",
        contentType: "application/json;charset=utf-8",
        dataType: "json",
        data: JSON.stringify(data),
        success: function (result) {
            var listItems = [];
            var blendSpecItems = JSON.parse(result.d);

            for (var key in blendSpecItems) {
                listItems.push('<option value="' + blendSpecItems[key].BlendSpecID + '">' + blendSpecItems[key].BlendName
                            + '</option>');
            }

            var lBox = $('select[id$=lbBlendSpecs]');
            $(lBox).append(listItems.join(''));
        }
    })
}

Test.aspx.cs

      [WebMethod()]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public  static string  Test(string message)
    {
       return message;
    }

当我在一个项目中尝试这个时,这很好用。 但是,当我将webmethod移动到同一解决方案中的单独的prjoject时,我得到一个ajax错误:

Error in: http://localhost/Test/MyWebService/Test.asmx/Test
 error: undefined
 type: ajaxError
 readystate: 4
 status: 500

3 个答案:

答案 0 :(得分:0)

Webmethod区分大小写。在您的代码函数中,参数消息中的公共静态字符串测试(字符串消息)是小写字母,您必须传递 data.Message M是大写,因此方法无法在代码端找到函数。

因此,如果您更改下面的代码,您的代码将正常运行

    [WebMethod()]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static string Test(string Message)
    {
        return Message;
    }

答案 1 :(得分:0)

  

当我将webmethod移动到同一解决方案中的单独的prjoect

您是否已将其移至Web服务项目并尝试在Web项目中使用,如果出现这种情况,则会由于跨站点脚本限制而发生此错误。如果您仍然需要将它们放在单独的项目中,则必须使用jsonp并返回jsonp友好响应。

你可以找到更多关于JSONP + ASMX @ JSONP & ASMX Web Service的信息。

答案 2 :(得分:0)

你的asmx文件中有这个标题[System.Web.Script.Services.ScriptService]。