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示例: -
答案 0 :(得分:1)
首先,您必须使用发布方法向您的网络服务发送请求。正如您使用JSONP
一样,因为它总是查找回调,并且您必须为它定义回调方法。
另外你必须添加如下
[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));
}
});
请参阅下面的输出
答案 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)