2013-10-14 203 views
1

真是痛苦!我試圖從JavaScript調用Web服務,但我似乎無法找到使其工作所需的魔法醬。使用JSON從jQuery調用Web服務

我的代碼看起來是這樣的:

的JavaScript:

$.ajax({ 
    url: "/Services/CompanyContactServices.asmx/AddContact", 
    type: 'POST', 
    contentType: "application/json", 
    dataType: "json", 
    data: { 
     companyId: 3725, firstName: firstName, lastName: lastName, email: email 
    }, 
    success: function (data) { 
     alert('Success!'); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     alert(errorThrown); 
    } 
}); 

Web服務(asmx.cs):

[WebService(Namespace = CompanyListServices.XmlnsNamespace)] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService] 
public class CompanyContactServices : System.Web.Services.WebService 
{ 
    public const string XmlnsNamespace = "mynamespace"; 

    [WebMethod(EnableSession = true)] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string AddContact(int companyId, string firstName, string lastName, string email) 
    { 
     return new JavaScriptSerializer().Serialize(0); 
    } 
} 

斷點處開始我AddContact方法永遠不會到達。

error的處理程序爲我ajax()調用包含在jqXHR以下錯誤消息:

{消息 「:」 無效JSON原始:companyId 「 」堆棧跟蹤。「:」 在System.Web.Script .Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() 在System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(深度Int) 在System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(字符串輸入,的Int32 depthLimit,JavaScriptSerializer串行器) 在System.Web.Scrip t.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer,String input,Type type,Int32 depthLimit) at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T](String input) at System.Web.Script.Services。 RestHandler.GetRawParamsFromPostRequest(HttpContext上下文,JavaScriptSerializer序列化程序) at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData,HttpContext context)at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context,WebServiceMethodData methodData)「 「ExceptionType」: 「System.ArgumentException」}」

鉻報告以下網絡數據:

請求URL:... /服務/ CompanyContactServices.asmx /的addContact

請求方法:POST

狀態代碼:500內部服務器錯誤

任何人都可以看到我是什麼失蹤?

+0

[?這是同樣的問題(http://stackoverflow.com/questions/2445874/messageinvalid-json-primitive-recordid) – Blazemonger

+0

你可能要考慮的ASP .NET Web-API讓後端更容易。當然,如果你喜歡對你的web方法中的json序列化和東西進行微管理,你可以堅持使用舊的技術... – Mithon

回答

4
{ companyId: 3725, firstName: firstName, lastName: lastName, email: email } 

上面的代碼是一個javascript對象,而不是JSON。 JSON是一個javascript對象的字符串表示。現代瀏覽器已實施json.stringify,但如果您計劃控制降級,則需要使用JSON3這樣的polyfill。

例子:

var company = {companyId: 3725, firstName: firstName, lastName: lastName, email: email}; 
var json = JSON.stringify(company); 
+0

是的,這解決了它(給@ Blazemonger的改變,使JSON全部大寫)。 –

+0

葉,我的壞。請標記爲答案。 – lolol