2010-10-29 116 views
2

字符串到asp.net web服务因为它是现在我创建一个JavaScript对象,然后字符串化它,把它放在一个隐藏的文本框,我后面的代码可以读取此字符串。然后我使用JSON.NET解析可以正常工作的字符串。我现在尝试使用ajax将其发布到我的Web服务,但在如何发送字符串时遇到了一些问题。我已经尝试了很多方法,但得到像如何通过使用jQuery/JSON/AJAX

Invalid JSON primitive: myString. 

常见的错误,所以我检查了这一点http://encosia.com/2010/05/31/asmx-scriptservice-mistake-invalid-json-primitive/并将其与硬编码值的作品,但我想用一个变量。

JavaScsript创建对象:

for (var i = 0; i < results.rows.length; i++) { 
     var row = results.rows.item(i); 
    var customer = new Object(); 

     customer.id = row['id'] 
     customer.name = row['name'] 

    var customerString = JSON.stringify(customer); 

    $.ajax({ 
     type: "POST", 
     url: "synchronise.asmx/synchroniseCustomers", 
     data: "synchroniseCustomers: " + customerString, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
        error: function (xhr, status) { 
       alert("An error occurred: " + status); 
      }, 
     success: function (msg) { 
      alert("success"); 
     } 
    }); 
} 

的WebMethod:

public void synchroniseCustomers(string customerString) 
     { 
      JObject o = JObject.Parse(customerString); 
      string id = (string)o["id"]; 
      string name = (string)o["name"]; 

如果我使用data: '{ FirstName: "Dave", LastName: "Ward" }' 在上面的例子中的作品,但我想传递一个字符串代替。

有什么建议吗?

感谢

回答

2

你很接近,但你需要发送这样的:

data: '{"synchroniseCustomers": ' + customerString + '}' 

而且,没有必要接受它作为一个字符串和反序列化手动基于.NET的JSON侧。如果将输入类型声明为匹配的服务器端结构,.NET将自动处理所有这些。

这应该与你正在试图做什么有帮助:http://encosia.com/2009/04/07/using-complex-types-to-make-calling-services-less-complex/

+0

戴夫嗨,用数据:“{‘synchroniseCustomers’:” + customerString +“}” 我仍然得到同样的错误,我试图做“synchroniseCustomers:”(换地方了结肠),但随后得以通过在错误无效的对象,\ u0027:} \ u0027或\ u0027 \ u0027预期。 – Morgan 2010-10-29 03:27:39

+0

昨天我看了那篇文章,并没有得到它的工作,但我现在做了,谢谢。 – Morgan 2010-10-29 03:35:27

0

你的数据参数需要包含在{}如果你传递JSON和您需要的WebMethod通过增加装饰是脚本可见。看看this blog entry我写了一段时间 - 它有一个例子。我也发现this article有帮助。

你应该添加到你的asmx类的属性是[System.Web.Script.Services.ScriptService],如果你还没有,你将需要添加[System.Web.Script.Services.ScriptMethod]到你的webmethod。

...顺便说一句,你传递字符串;它只是以json格式。如果你想使用JSON你可以离开contentType过你的电话,并通过您的参数,如下面虽然你必须验证您的ASMX将解析确定的参数之外的参数传递机制(MVC与它没有任何疑虑:)

data:"FirstName=David&LastName=Ward" 
+0

是啊,因为我写它的工作原理与硬编码值,但我想发布一个字符串代替。 – Morgan 2010-10-29 03:19:58

+0

事情是我对50个变量,因此更容易字符串化他们,然后分析它在Web服务,而不必在很多地方更新字段(如果我需要即是)。 – Morgan 2010-10-29 03:22:12

+0

在这种情况下,考虑jQuery的序列化()方法序列化你的表格并发送所有[http://api.jquery.com/serialize/] – Tahbaza 2010-10-29 03:27:00