【问题标题】:Ajax undefined error when calling ASMX调用 ASMX 时出现 Ajax 未定义错误
【发布时间】:2014-08-12 01:55:31
【问题描述】:
<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 移动到同一解决方案中的单独项目中时,我得到一个 ajax 错误:

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

【问题讨论】:

    标签: c# jquery ajax


    【解决方案1】:

    您的 asmx 文件中是否有此标头 [System.Web.Script.Services.ScriptService]。

    【讨论】:

    • 不,我把它拿出来是因为这会阻止 jQuery 执行 ajax 请求。
    • 其实就是用来做脚本来了解那些现有的方法的。所以请加进去试试。
    【解决方案2】:

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

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

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

    【讨论】:

    • 是的,我尝试了这条途径,我会再调查一下。或者我可能只是转向 WCF,我不敢相信这个简单的任务如此难以实现。
    【解决方案3】:

    Webmethod 区分大小写。在您的代码中,函数是 public static string Test(string message),参数中的 message 是小写字母,您必须传递 data.Message M是大写,所以方法无法在代码端找到函数。

    因此,如果您更改如下代码,您的代码将正常工作

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

    【讨论】:

    • 我可能在帖子中更改了它以表达我的观点。该示例工作正常,当我将其移至 ASMX 服务时失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 2021-10-25
    • 2019-05-26
    相关资源
    最近更新 更多