我从jQuery文件调用.NET Web服务,该文件不是项目的一部分。每当我调用该服务时,它都会显示OPTIONS /HOCWebService.asmx/HelloWorld并且不会返回任何内容。到底是怎么回事?在web.config中,我已经指定允许Web服务使用httpGet和httpPost。
更新1:
$.ajax(
{
type: "POST",
url: "http://127.0.0.1:8080/HOCWebService.asmx/HelloWorld",
data: "{}",
dataType: "json",
contentType: "application/json",
success: function (response) {
alert(response.d);
var categories = $.evalJSON(response.d);
for (i = 0; i < categories.length; i++) {
var span = $(document.createElement("span"));
$(span).addClass("ui-li-count");
$(span).html(categories[i].Count);
var li = $(document.createElement("li"));
var anchor = $(document.createElement("a"));
$(anchor).attr("href", "/Home/detail/"+categories[i].Id);
$(anchor).html(categories[i].Title);
$(li).append(anchor);
$(li).append(span);
// $("#categoriesListView").append('<li><a href="/Home/detail/' + categories[i].Id + '">' + categories[i].Title + '</a></li>');
$("#categoriesListView").append(li);
// $(span).text(categories[i].Count);
}
$("#categoriesListView").listview('refresh');
}
}
);
答案 0 :(得分:2)
.NET框架中ASMX文件的默认实现意味着您正在处理SOAP Web服务,因此将发送和接收XML wrapped in a SOAP envelope(而不是JSON)。
尝试:
$.ajax({
// 1. Loose the 'HelloWorld' from the URL
url: "http://127.0.0.1:8080/HOCWebService.asmx",
type: 'POST',
async: false,
dataType: 'xml',
// 2. But add it as a HTTP Header called 'SOAPAction'
headers: {
SOAPAction: "http://www.tempuri.org/HelloWorld"
},
contentType: 'text/xml; charset="utf-8"',
// 3. The data sent to the server must be a SOAP XML Envelope
data: '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' +
'<soap:Body>' +
'<HelloWorld xmlns="http://www.tempuri.org/" />' +
'</soap:Body>' +
'</soap:Envelope>',
sucess: function(response) {
alert(response.responseText);
// Completion logic goes here
}
});
请注意,作为上述实现的一部分,您需要一个名为'SOAPAction'的HTTP POST标头,与您调用的方法相匹配,否则它将不起作用:
headers: {
SOAPAction: "http://www.tempuri.org/HelloWorld"
},
表示POST请求将包含以下最后一行:
POST /HOCWebService.asmx HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 453
SOAPAction: "http://www.tempuri.org/HelloWorld"
http://www.tempuri.org/
是Microsoft在您创建新的ASMX服务时使用的默认命名空间,可以随意将其更新为您在实现中使用的实际命名空间。
<强>建议:强>
如果您需要从应用程序向后和向前发送JSON,我是否可以建议您使用something similar to this approach使用Generic Handler(ASHX文件)。