2010-10-29 87 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