【问题标题】:WCF jQuery post data doesn't workWCF jQuery 发布数据不起作用
【发布时间】:2013-03-22 10:31:44
【问题描述】:

我在使用 WCF 服务时遇到了一些问题:该服务应该与运行在其他服务器上的 AJAX 客户端通信。所以,我有一个跨域问题。我搜索并工作了 2 天,但我没有找到一些解决方案,这很容易理解。

当我使用 Fiddler 时,它们可以与服务器通信,但只有在将 content-length 属性设置为零时。

GET 方法也可以工作,但 PUT 永远不会。

这里是一些方向的代码:

服务器方法:

型号:

[DataContract]
public class Person
{
    [DataMember]
    private string id;
    [DataMember]
    private string name;

    public Person(string id, string name)
    {
       this.id = id;
       this.name = name;
    }

    public string Id { get; set; }
    public string Name { get; set; }

  }

服务器接口和实现:

   [ServiceContract]
   interface IPersonService
   {
       ...

       [OperationContract]
       Person InsertPerson(Person person);
   }

 [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
 public class PersonService : IPersonService
 {

     [WebInvoke(UriTemplate = "/POST/PersonPost", Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    public Person InsertPerson(Person per)
    {
        Debug.WriteLine("InsertPerson");
        if (per == null)
        {
            return new Person("2", "null");
        }
        Debug.WriteLine("POST:[PersonId = {0} PersonName = {1}]", per.Id, per.Name);
         return new Person("1", "InsertPerson");
    }

最后是客户端

var person = '{"per":{';
                person = person + '"id":"' + '"abc123"' + '",'
                person = person + '"name":"' + '"john"' + '"'
                person = person + '}}';

                alert(person);
                $.support.cors = true;

                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    dataType: "jsonp",
                    data: person,
                    processData: false,
                    crossDomain: true,
                    url: "http://localhost:59291/Person/POST/PersonPost",
                    success: function (data) {
                        alert("Post erfolgreich: ");

                    },
                    error: function (xhr, ajaxOptions, thrownError) {
                        alert("Fehler Post: Status " + xhr.status + " AntwortText " + xhr.responseText);
                    }
                });

谁能告诉我我该怎么做才能让它发挥作用: 简而言之,目前我在使用 jQuery 方法时没有连接到服务器。

【问题讨论】:

    标签: jquery json wcf rest cross-domain


    【解决方案1】:

    首先你应该使用一个对象:

    var myObject ={};
    myObject.Id = '';
    myObject.Name ='';
    

    并使用JSON.stringify(myObject);

    可能想从您的 ajax 调用中删除它:dataType: "jsonp", 您也可能想从这个问题Cross domain ajax request 中检查问题。

        var person = {};
    person.id ="abc123";
    person.name ="aaaa";
    var per = {};
    per.per = person;
    
                    $.support.cors = true;
    
                    $.ajax({
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        data: JSON.stringify(per),
                        dataType: "jsonp",
                        processData: false,
                        crossDomain: true,
                        url: "http://localhost:59291/Person/POST/PersonPost",
                        success: function (data) {
                            alert("Post erfolgreich: ");
    
                        },
                        error: function (xhr, ajaxOptions, thrownError) {
                            alert("Fehler Post: Status " + xhr.status + " AntwortText " + xhr.responseText);
                        }
                    });
    

    【讨论】:

    • Fehler 帖子:状态 200 AntwortText 未定义
    • 我用的是 .NET 4.5,你知道如何在 Visual Studion 调试中启用 CORS
    • 你是男人,现在我可以访问我在服务器中的方法。但是我怎样才能访问我的 Person 对象,这是客户端通过数据发送的
    • 一分钟 Floradu88,你能不能说我怎么能访问 Servermethod 中的对象/数据
    • 数据类型的 jsonp 仍然存在,但正确吗?而且我认为对服务器的访问仍然可以在 IE 中工作,而不是在 chrome 中。但首先我检查你的提示
    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多