Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我不能用Javascript访问我的WCF web服务吗?_Javascript_Ajax_Wcf_Web Services_Httprequest - Fatal编程技术网

为什么可以';我不能用Javascript访问我的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

我是AJAX新手,尝试通过以下方式访问WCF web服务:

$(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!'); }
});