为什么可以';我不能用Javascript访问我的WCF web服务吗?
我是AJAX新手,尝试通过以下方式访问WCF web服务:为什么可以';我不能用Javascript访问我的WCF web服务吗?,javascript,ajax,wcf,web-services,httprequest,Javascript,Ajax,Wcf,Web Services,Httprequest,我是AJAX新手,尝试通过以下方式访问WCF web服务: $(function () { $('#formNew').submit(function () { var datos = { "Nombre": $('#nombre').val(), "ApellidoP": $('#appP').val(), "ApellidoM": $('#appM').val(), "Us
$(function () {
$('#formNew').submit(function () {
var datos = {
"Nombre": $('#nombre').val(),
"ApellidoP": $('#appP').val(),
"ApellidoM": $('#appM').val(),
"UserName": $('#username').val(),
"Password": $('#password').val(),
};
var args = "Data=" + JSON.stringify(datos);
var url = 'http://127.0.0.1:81/SismosService.svc/usuario/new?' + args;
alert(url);
$.ajax({
type: 'GET',
url: url,
success: function (data) {
alert("Exito " + JSON.stringify(data));
},
error: function (data) {
alert("Error " + JSON.stringify(data));
}
});
});
});
当我填写表单并单击submit按钮时,Firebug出现以下错误:
N
我的web服务定义如下:
[WebGet(UriTemplate = "/usuario/new?Data={data}",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare)]
ResponseObject<Usuarios> NewUsuario(string data);
[WebGet(UriTemplate=“/usuario/new?Data={Data}”,
RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json,
BodyStyle=WebMessageBodyStyle.Bare)]
响应对象NewUsuario(字符串数据);
我做错了什么?这是我发送参数的方式吗?是我尝试访问web服务的方式吗?感谢您的帮助。JSON.stringify(数据)用于将javascript对象转换为JSON表示 我认为在success\error函数中,您需要走另一条路:
success: function (data) {
alert("Exito " + JSON.parse(data));
},
error: function (data) {
alert("Error " + JSON.parse(data));
}
(使用JSON.parse、JSON.stringify时-确保在项目中包含json2.min.js)我通常使用以下配置来启用对我的WCF服务的ajax调用: 1) 首先,我在Web.config中创建一个JSON端点行为,并将我的服务与之关联:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="WebHttpJson">
<webHttp defaultBodyStyle="Wrapped"
defaultOutgoingResponseFormat="Json" />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="MyApp.LoginService">
<endpoint address=""
behaviorConfiguration="WebHttpJson"
binding="webHttpBinding"
contract="MyApp.LoginService" />
</service>
</services>
</system.serviceModel>
3) 最后进行jQuery ajax调用,如下所示:
$.ajax({
contentType: 'application/json; charset=utf-8',
url: serviceUrl + '/SignIn',
type: 'POST',
data: JSON.stringify({
email: 'john.doe@abc.com',
pswd: 'qwerty'
}),
success: function () { alert('success!'); },
error: function () { alert('error!'); }
});
这并不能解决我的问题,没有调用web服务,我将url变量复制粘贴到选项卡上,它确实可以访问终结点,我不知道为什么不访问终结点。我不明白为什么我应该用OperationContract属性替换WebGet属性,配置每个端点的方法似乎较少。但是,它仍然不起作用。我让我的web.config看起来像,这是我添加新用户的方法是如何定义的,这是我调用javascript函数的方式。我想我没有清楚地解释自己,因为某些原因,我无法通过ajax调用端点,我真的很困惑,我是新手。1)您必须使用指示哪些方法是WCF服务的一部分;2) 你的Web.Config看起来不错,如果你的应用程序编译时没有错误,那么很可能是这样;3) 删除当前在C#方法中使用的所有属性,其中一些属性与Web.Config冲突;4) ajax调用中的url是错误的,它应该以方法名NewUsuario结尾,但它以new结尾;5) 将args字符串更改为以data=(区分大小写)开头Uri模板属性让我指定要访问的url,这就是为什么我要访问/usuario/new而不是NewUsuario,如果我通过浏览器访问它,它会起作用。无论如何,我删除了所有WebGet并尝试访问127.0.0.1:81/SismosService.svc/GetUsuarios,但它不起作用,它说方法不允许,因为现在我得到了这个错误{“readyState”:0,“responseText:”,“status”:0,“statusText:“error”},据我所知,这是因为CORS问题,但我已经在我的web.config上添加了CORS兼容性,我不明白为什么我不能访问负责插入、更新或删除的端点。您如何访问具有ajax调用的网页?如果您是这样访问它的“”,那么您的web服务应该使用“localhost”而不是“127.0.0.1”。另一个问题是,您似乎在WCF端点使用不同的端口,我不确定浏览器是否允许这样做。为什么要为方法定义另一个名称,使用自定义端口并使用GET而不是POST?
[ServiceContract]
public class LoginService
{
[OperationContract]
public void SignIn(string email, string pswd)
{
// Check credentials and create session cookie
}
}
$.ajax({
contentType: 'application/json; charset=utf-8',
url: serviceUrl + '/SignIn',
type: 'POST',
data: JSON.stringify({
email: 'john.doe@abc.com',
pswd: 'qwerty'
}),
success: function () { alert('success!'); },
error: function () { alert('error!'); }
});