使用 Response.Write JSON 输出从 Jquery 调用 c# asmx Web 服务

Posted

技术标签:

【中文标题】使用 Response.Write JSON 输出从 Jquery 调用 c# asmx Web 服务【英文标题】:Calling c# asmx web service from Jquery with Response.Write JSON output 【发布时间】:2017-04-05 16:10:44 【问题描述】:

我有一个如下所示的 c# asmx Web 服务代码。

[WebMethod]
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
    public void getPolicyDetails(string CustId, string PolicyType)
    
        javascriptSerializer js = new JavaScriptSerializer();
        Context.Response.Clear();
        Context.Response.ContentType = "application/json";
        clsPolicy data = new clsPolicy();
        try
        
            string policyTxt = "";
            //get PolicyTxt from Database
            data.Message = policyTxt.ToString();
        
        catch (Exception ex)
        
        
        Context.Response.Write(js.Serialize(data));
    

现在,我正在尝试在 asp.net 中使用此 Web 服务。这个网络服务已经在我的安卓项目中成功使用了。

当我尝试通过 javascript 调用它时,它给了我一个 500 - 内部服务器错误。下面是我的 Javascript 代码。

 function getPolicy(policyType) 
            $.ajax(
                type: "POST",
                url: "http://myurl/productsearch.asmx/getPolicyDetails",
                data: 'CustId: 106206,PolicyType: "' + policyType + '" ',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: OnSuccess,
                failure: function (response) 
                    alert(response.d);
                
            );
        
        function OnSuccess(response) 
            alert(response.d);
        

可能是什么问题?

【问题讨论】:

【参考方案1】:

Error 500 Internal Server Error与webservice中的错误有关。

调试/记录错误的不同方法

    在 catch 块中,使用文件处理代码将该错误记录到文本文件中。

    如果您有权访问部署服务的服务器并且在该服务器上安装了 Visual Studio,则通过将其附加到 w3wp 进程来调试您的 Web 服务。

    您可以检查错误窗口事件查看器

    控制面板 -> 管理工具 -> 事件查看器

    在左侧面板上展开 Windows 日志并单击应用程序菜单并在与您的应用程序相关的错误日志中找到详细信息

【讨论】:

【参考方案2】:
public void getPolicyDetails(string CustId, string PolicyType)

您将 CustID 定义为字符串,但在您的 json 中它是整数

data: 'CustId: 106206,PolicyType: "' + policyType + '" '

同时开始使用JSON.stringify 来创建您的数据。

var policyType = 'something';
var custID = '106206';
data: JSON.stringify(CustId:custID, PolicyType: policyType )

【讨论】:

好的。让我试着用一个字符串回复你。 修改代码:var custid = "106206";数据:'CustId: "' + custid + '",PolicyType: "' + policyType + '" '。 @milanm write 使用 JSON.stringify 就像我写的一样 不幸的是,它仍然无法正常工作。同一页面上还有另一个 Web 服务,我没有传递参数,并且工作得非常好。我想知道这个有什么问题?

以上是关于使用 Response.Write JSON 输出从 Jquery 调用 c# asmx Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

ajax 技术有一事不明有高人指点,当我们用responseText接收response.write输出的值时有长度限制吗?

spring mvc 是不是有 response.write 可以直接输出到浏览器?

Response.Write 和 Response.redirect 不可同时使用

初入nodejs -- response.write对象时报错

在asp.net中用response.write方法输出Javascript弹出模态对话框,怎么解决父窗口空白的问题!

Response.Write 不适用于生产 [重复]