ASP.Net Web服务始终返回XML而不是JSON

时间:2013-04-24 14:34:17

标签: javascript jquery asp.net json web-services

Currenly我使用asp.net web服务但是当我通过ajax调用它调用web服务方法时,它总是返回XML而不是json

我试试

ASP.Net web service won't return JSON - Always XML

但它也不适合我......

JS: -

$.ajax({
            type: "Post",
            contentType: "application/json; charset=utf-8",
            url: "http://www.quietincomes.com/LoginWebservice.asmx/Demo",
            dataType: "jsonp",
            success: function (data) {
                alert("1" + data);
            },
            error: function (result) {
                alert("2" + JSON.stringify(result));
            }
});

LoginWebservice.asmx: -

 [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string Demo()
    {
        return "Harshit";
    }

我错了..

jsfiddle示例: -

http://jsfiddle.net/EXvqc/

2 个答案:

答案 0 :(得分:1)

首先,您必须使用发布方法向您的网络服务发送请求。正如您使用JSONP一样,因为它总是查找回调,并且您必须为它定义回调方法。

Refer

另外你必须添加如下

[System.Web.Script.Services.ScriptService]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class LoginWebservice : System.Web.Services.WebService
    {

        [WebMethod]
        public string Demo()
        {
            return "Harshit";
        }
    }

表示可以从脚本调用Web服务。这个类不能被继承。

您的 aspx / HTML 将包含

$.ajax({
            type: "Post",
            contentType: "application/json; charset=utf-8",
            url: "http://www.quietincomes.com/LoginWebservice.asmx/Demo",
            dataType: "json",
            success: function (data) {
                alert("1" + data);
            },
            error: function (result) {
                alert("2" + JSON.stringify(result));
            }
});

请参阅下面的输出

enter image description here

答案 1 :(得分:-1)

JSONP不是JSON,JSONP用于获取相同的源策略(站点A不能向站点B发出ajax请求)。要解决此问题,站点A将创建脚本标记:

document.createElement("script")

然后将它的源设置为站点B,通常指定一个回调,如www.B?callback = callMe

站点B的典型响应是:

callMe({siteBSays:"hello"});

JQuery隐藏为您创建javascript元素,因此它看起来像普通的ajax请求。确保站点B具有正确的响应类型标题我认为它是text / javascript

执行跨域请求的另一种方法是,站点B有一个响应头,允许站点A通过设置响应头Access-Control-Allow-Origin

向它发出ajax请求(cors)