ajax jquery - 无效的JSON格式

时间:2013-03-20 06:15:57

标签: json jquery

我正在尝试将json对象发送到Web服务。我在萤火虫中低于错误。

{"Message":"Invalid object passed in, \u0027:\u0027 or \u0027}\u0027 expected. (3423): {\u0027GUID\u0027:\u0027urhhh1bqbezjvb45dnqlgj45\u0027,\u0027RuleName\u0027:\u0027Summary Check\u0027,\u0027LinkArray\u0027:\u0027[{\"from\":\"Start\",\"to\":\"Count\",\"text\":\"Next\",\"fromPort\":\"5\",\"toPort\":\"1\"},{\"from\":\"Count.6\",\"to\":\"Multiple Decisions\",\"text\":\"Next\",\"fromPort\":\"5\",\"toPort\":\"1\"},{\"from\":\"Multiple Decisions\",\"to\":\"Status\",\"text\":\"True\",\"fromPort\":\"3\",\"toPort\":\"7\"},{\"from\":\"Multiple Decisions\",\"to\":\"Finish\",\"text\":\"False\",\"fromPort\":\"5\",\"toPort\":\"1\"},{\"from\":\"Status\",\"to\":\"Finish.14\",\"text\":\"Next\",\"fromPort\":\"3\",\"toPort\":\"7\"},{\"from\":\"Count\",\"to\":\"Count.6\",\"text\":\"Next\",\"fromPort\":\"5\",\"toPort\":\"1\"}]\u0027,\u0027NArray\u0027:\u0027[{\"key\":\"StatusText\",\"category\":\"Comment\",\"location\":\"10 10\",\"text\":\"Step 10\\rEvent = PAEditQuote\\rModel = PAStatementValidation\",\"figure\":\"RoundedRectangle\"},{\"key\":\"Start\",\"category\":\"begin\",\"type\":\"Start\",\"location\":\"169 124\",\"size\":\"57 55\",\"text\":\"\",\"tooltip\":\"Datasource=\",\"break\":\"false\",\"Properties\":{\"Name\":\"Start\"}},{\"key\":\"Count.6\",\"category\":\"image\",\"type\":\"Count\",\"location\":\"172 378\",\"size\":\"49 49\",\"text\":\"# of Sele QA’s\",\"tooltip\":\"Number of Sele Question Answers=Statement Sele QA Where Statement Sele Answer Required equals Y\",\"break\":\"false\",\"Properties\":{\"Variable\":\"[:000013]\",\"Name\":\"Count\",\"Message\":\"Count\",\"ShortName\":\"Statement Sele QA\",\"Operand1\":\"equals\",\"Value1\":\"Y\",\"CountType1\":\"All\",\"DecShortName\":\"Statement Sele Answer Required\",\"DataBase\":\"DB1\",\"Table\":\"SHSeleQuestions\",\"XMLPath\":\"DB1\\\\SHSeleQuestions\",\"DecXMLPath\":\"DB1\\\\SHSeleQuestions\\\\ResponseReqInd\"}},{\"key\":\"Multiple Decisions\",\"category\":\"Decision\",\"type\":\"DecPlus\",\"location\":\"169 508\",\"size\":\"75 56\",\"text\":\"If no required answers given\",\"tooltip\":\"Number of Sele Question Answers is greater than 0\",\"break\":\"false\",\"Properties\":{\"DecisionInd\":\"True\",\"Variable1\":\"[:000013]\",\"Operand1_1\":\"is greater than\",\"Value1_1\":\"0\",\"Name\":\"DecPlus\",\"Variable2\":\"[:000015]\",\"Operand1_2\":\"equals\",\"Value1_2\":\"0\"}},{\"key\":\"Finish\",\"category\":\"end\",\"type\":\"Finish\",\"location\":\"172 625\",\"size\":\"57 55\",\"text\":\"\",\"tooltip\":\"\",\"break\":\"false\",\"Properties\":{\"Name\":\"Finish\"}},{\"key\":\"Status\",\"category\":\"image\",\"type\":\"Status\",\"location\":\"313 508\",\"size\":\"53 49\",\"text\":\"HOST003\",\"tooltip\":\"Warning=HOST003 - All Questions must be answered on the Statement Page.\",\"break\":\"false\",\"Properties\":{\"Name\":\"Status\",\"Message\":\"Validation.IValidation\",\"StatusCode\":\"PADriver002\",\"StatusType\":\"Error\",\"StatusMessage\":\"All Questions must be answered on the Statement Page.\",\"StatusPage\":\"PAStatement.aspx\",\"Unique\":\"False\"},\"Unique\":\"False\"},{\"key\":\"Finish.14\",\"category\":\"end\",\"type\":\"Finish\",\"location\":\"461 508\",\"size\":\"57 55\",\"text\":\"Stop Model\",\"tooltip\":\"\",\"break\":\"false\",\"Properties\":{\"Name\":\"Finish\",\"Termination\":\"StopModel\"}},{\"key\":\"Count\",\"category\":\"image\",\"type\":\"MultiCount\",\"location\":\"172 252\",\"size\":\"49 49\",\"selected\":\"true\",\"text\":\"Statement Answer\",\"tooltip\":\"=\",\"break\":\"false\",\"Properties\":{\"Variable\":\"[:000015]\",\"Name\":\"MultiCount\",\"Message\":\"MultiCount\",\"ShortName\":\"Statement Answer\",\"CountType1\":\"All\",\"ShortName1\":\"Statement Answer\",\"Operand1_1\":\"does not equal\",\"Item\":\"1\",\"XMLDoc\":\"PagePolicyData\",\"XMLPath\":\"PagePolicyData\\\\ValidationMessage\\\\PageContent\\\\ACORD\\\\PersAutoLineBusiness\\\\QuestionAnswer\\\\YesNoCd\",\"XMLPath1\":\"PagePolicyData\\\\ValidationMessage\\\\PageContent\\\\ACORD\\\\PersAutoLineBusiness\\\\QuestionAnswer\\\\YesNoCd\",\"XMLCondPath\":\"Root\\\\PagePolicyData\\\\ValidationMessage\\\\PageContent\\\\ACORD\\\\PersAutoLineBusiness\\\\QuestionAnswer{((YesNoCd != \u0027\u0027))}\\\\YesNoCd\"}},{\"category\":\"Comment\",\"location\":\"450 50\",\"size\":\"150 38\",\"figure\":\"RoundedRectangle\",\"text\":\"Summary Check\"}]\u0027,\u0027RulesArray\u0027:\u0027{\"0\":\"Check Bypass\",\"1\":\"Bypass Edorsement\",\"2\":\"Statement Questions\"}\u0027}","StackTrace":"   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n   at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}

Jquery ajax对webservice的调用如下:

    var LinkArray = localStorage['LinkArray'];
    var NodeArray = localStorage['NArray'].replace("'", "\'");           
    var RulesArray=localStorage['TabList'];
    var Parameters = "{'GUID':'" + GetQueryStringValue('GUID') + "','RuleName':'" + $("#rulename").text() + "','LinkArray':'" + LinkArray + "','NArray':'" + NodeArray + "','RulesArray':'" + RulesArray + "'}";
    //var Parameters = '{"GUID":"' + GetQueryStringValue("GUID") + '","RuleName":"' + $('#rulename').text() + '","LinkArray":"' + LinkArray + '","NArray":"' + NodeArray + '","RulesArray":"' + RulesArray + '"}';

    $.ajax({
        type: "POST",
        url: "../RulesWebService.asmx/UpdateAllProperties",
        data: Parameters,            
        contentType: 'application/json; charset=utf-8',            
        crossBrowser: true,
        success: function (GetStatusRs) {

        },
        //onerror throw error.
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert('Error Getting status for parameters: - Error:' + errorThrown);
        }
    });

我的网络方法结构如下:

<WebMethod(EnableSession:=True)> _
  Public Function UpdateAllProperties(ByVal GUID As String, ByVal RuleName As String, ByVal LinkArray As String, ByVal NArray As String, ByVal RulesArray As String) As String
  'some stuff here.
End Function

以下是我将其发布到服务器的参数值。

{'GUID':'urhhh1bqbezjvb45dnqlgj45','RuleName':'Summary Check','LinkArray':'[{"from":"Start","to":"Count","text":"Next","fromPort":"5","toPort":"1"},{"from":"Count.6","to":"Multiple Decisions","text":"Next","fromPort":"5","toPort":"1"},{"from":"Multiple Decisions","to":"Status","text":"True","fromPort":"3","toPort":"7"},{"from":"Multiple Decisions","to":"Finish","text":"False","fromPort":"5","toPort":"1"},{"from":"Status","to":"Finish.14","text":"Next","fromPort":"3","toPort":"7"},{"from":"Count","to":"Count.6","text":"Next","fromPort":"5","toPort":"1"}]','NArray':'[{"key":"StatusText","category":"Comment","location":"10 10","text":"Step 10\rEvent = PAEditQuote\rModel = PAStatementValidation","figure":"RoundedRectangle"},{"key":"Start","category":"begin","type":"Start","location":"169 124","size":"57 55","text":"","tooltip":"Datasource=","break":"false","Properties":{"Name":"Start"}},{"key":"Count.6","category":"image","type":"Count","location":"172 378","size":"49 49","text":"# of Sele QA’s","tooltip":"Number of Sele Question Answers=Statement Sele QA Where Statement Sele Answer Required equals Y","break":"false","Properties":{"Variable":"[:000013]","Name":"Count","Message":"Count","ShortName":"Statement Sele QA","Operand1":"equals","Value1":"Y","CountType1":"All","DecShortName":"Statement Sele Answer Required","DataBase":"DB1","Table":"SHSeleQuestions","XMLPath":"DB1\\SHSeleQuestions","DecXMLPath":"DB1\\SHSeleQuestions\\ResponseReqInd"}},{"key":"Multiple Decisions","category":"Decision","type":"DecPlus","location":"169 508","size":"75 56","text":"If no required answers given","tooltip":"Number of Sele Question Answers is greater than 0","break":"false","Properties":{"DecisionInd":"True","Variable1":"[:000013]","Operand1_1":"is greater than","Value1_1":"0","Name":"DecPlus","Variable2":"[:000015]","Operand1_2":"equals","Value1_2":"0"}},{"key":"Finish","category":"end","type":"Finish","location":"172 625","size":"57 55","text":"","tooltip":"","break":"false","Properties":{"Name":"Finish"}},{"key":"Status","category":"image","type":"Status","location":"313 508","size":"53 49","text":"HOST003","tooltip":"Warning=HOST003 - All Questions must be answered on the Statement Page.","break":"false","Properties":{"Name":"Status","Message":"Validation.IValidation","StatusCode":"PADriver002","StatusType":"Error","StatusMessage":"All Questions must be answered on the Statement Page.","StatusPage":"PAStatement.aspx","Unique":"False"},"Unique":"False"},{"key":"Finish.14","category":"end","type":"Finish","location":"461 508","size":"57 55","text":"Stop Model","tooltip":"","break":"false","Properties":{"Name":"Finish","Termination":"StopModel"}},{"key":"Count","category":"image","type":"MultiCount","location":"172 252","size":"49 49","selected":"true","text":"Statement Answer","tooltip":"=","break":"false","Properties":{"Variable":"[:000015]","Name":"MultiCount","Message":"MultiCount","ShortName":"Statement Answer","CountType1":"All","ShortName1":"Statement Answer","Operand1_1":"does not equal","Item":"1","XMLDoc":"PagePolicyData","XMLPath":"PagePolicyData\\ValidationMessage\\PageContent\\ACORD\\PersAutoLineBusiness\\QuestionAnswer\\YesNoCd","XMLPath1":"PagePolicyData\\ValidationMessage\\PageContent\\ACORD\\PersAutoLineBusiness\\QuestionAnswer\\YesNoCd","XMLCondPath":"Root\\PagePolicyData\\ValidationMessage\\PageContent\\ACORD\\PersAutoLineBusiness\\QuestionAnswer{((YesNoCd != ''))}\\YesNoCd"}},{"category":"Comment","location":"450 50","size":"150 38","figure":"RoundedRectangle","text":"Summary Check"}]','RulesArray':'{"0":"Check Bypass","1":"Bypass Edorsement","2":"Statement Questions"}'}

2 个答案:

答案 0 :(得分:2)

您是否尝试过使用JSON.stringify()。使用JSON.stringify,您可以使用一个对象来存储每个值,并使用stringify使其成为JSON。

var LinkArray = localStorage['LinkArray'];
    var NodeArray = localStorage['NArray'].replace("'", "\'");           
    var RulesArray=localStorage['TabList'];
    var Parameters = "{'GUID':'" + GetQueryStringValue('GUID') + "','RuleName':'" + $("#rulename").text() + "','LinkArray':'" + LinkArray + "','NArray':'" + NodeArray + "','RulesArray':'" + RulesArray + "'}";
    //var Parameters = '{"GUID":"' + GetQueryStringValue("GUID") + '","RuleName":"' + $('#rulename').text() + '","LinkArray":"' + LinkArray + '","NArray":"' + NodeArray + '","RulesArray":"' + RulesArray + '"}';

$.ajax({
    type: "POST",
    url: "../RulesWebService.asmx/UpdateAllProperties",
    data: JSON.stringify(Parameters),            
    contentType: 'application/json; charset=utf-8',            
    crossBrowser: true,
    success: function (GetStatusRs) {

    },
    //onerror throw error.
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert('Error Getting status for parameters: - Error:' + errorThrown);
    }
});

编辑1: 您的对象应如下所示:

var Parameters = {};
Parameters.Guid = 'your value';
// the rest of the fields from your object.

答案 1 :(得分:0)

您发布服务器的参数值格式错误。使用http://jsonlint.com/来纠正你的json。现在尝试使用thisas参数..

{
        "GUID": "urhhh1bqbezjvb45dnqlgj45",
        "RuleName": "SummaryCheck",
        "LinkArray": [
            {
                "from": "Start",
                "to": "Count",
                "text": "Next",
                "fromPort": "5",
                "toPort": "1"
            },
            {
                "from": "Count.6",
                "to": "Multiple Decisions",
                "text": "Next",
                "fromPort": "5",
                "toPort": "1"
            },
            {
                "from": "Multiple Decisions",
                "to": "Status",
                "text": "True",
                "fromPort": "3",
                "toPort": "7"
            },
            {
                "from": "Multiple Decisions",
                "to": "Finish",
                "text": "False",
                "fromPort": "5",
                "toPort": "1"
            },
            {
                "from": "Status",
                "to": "Finish.14",
                "text": "Next",
                "fromPort": "3",
                "toPort": "7"
            },
            {
                "from": "Count",
                "to": "Count.6",
                "text": "Next",
                "fromPort": "5",
                "toPort": "1"
            }
        ],
        "NArray": [
            {
                "key": "StatusText",
                "category": "Comment",
                "location": "10 10",
                "text": "Step 10\rEvent = PAEditQuote\rModel = PAStatementValidation",
                "figure": "RoundedRectangle"
            },
            {
                "key": "Start",
                "category": "begin",
                "type": "Start",
                "location": "169 124",
                "size": "57 55",
                "text": "",
                "tooltip": "Datasource=",
                "break": "false",
                "Properties": {
                    "Name": "Start"
                }
            },
            {
                "key": "Count.6",
                "category": "image",
                "type": "Count",
                "location": "172 378",
                "size": "49 49",
                "text": "# of Sele QA’s",
                "tooltip": "Number of Sele Question Answers=Statement Sele QA Where Statement Sele Answer Required equals Y",
                "break": "false",
                "Properties": {
                    "Variable": "[:000013]",
                    "Name": "Count",
                    "Message": "Count",
                    "ShortName": "Statement Sele QA",
                    "Operand1": "equals",
                    "Value1": "Y",
                    "CountType1": "All",
                    "DecShortName": "Statement Sele Answer Required",
                    "DataBase": "DB1",
                    "Table": "SHSeleQuestions",
                    "XMLPath": "DB1\\SHSeleQuestions",
                    "DecXMLPath": "DB1\\SHSeleQuestions\\ResponseReqInd"
                }
            },
            {
                "key": "Multiple Decisions",
                "category": "Decision",
                "type": "DecPlus",
                "location": "169 508",
                "size": "75 56",
                "text": "If no required answers given",
                "tooltip": "Number of Sele Question Answers is greater than 0",
                "break": "false",
                "Properties": {
                    "DecisionInd": "True",
                    "Variable1": "[:000013]",
                    "Operand1_1": "is greater than",
                    "Value1_1": "0",
                    "Name": "DecPlus",
                    "Variable2": "[:000015]",
                    "Operand1_2": "equals",
                    "Value1_2": "0"
                }
            },
            {
                "key": "Finish",
                "category": "end",
                "type": "Finish",
                "location": "172 625",
                "size": "57 55",
                "text": "",
                "tooltip": "",
                "break": "false",
                "Properties": {
                    "Name": "Finish"
                }
            },
            {
                "key": "Status",
                "category": "image",
                "type": "Status",
                "location": "313 508",
                "size": "53 49",
                "text": "HOST003",
                "tooltip": "Warning=HOST003 - All Questions must be answered on the Statement Page.",
                "break": "false",
                "Properties": {
                    "Name": "Status",
                    "Message": "Validation.IValidation",
                    "StatusCode": "PADriver002",
                    "StatusType": "Error",
                    "StatusMessage": "All Questions must be answered on the Statement Page.",
                    "StatusPage": "PAStatement.aspx",
                    "Unique": "False"
                },
                "Unique": "False"
            },
            {
                "key": "Finish.14",
                "category": "end",
                "type": "Finish",
                "location": "461 508",
                "size": "57 55",
                "text": "Stop Model",
                "tooltip": "",
                "break": "false",
                "Properties": {
                    "Name": "Finish",
                    "Termination": "StopModel"
                }
            },
            {
                "key": "Count",
                "category": "image",
                "type": "MultiCount",
                "location": "172 252",
                "size": "49 49",
                "selected": "true",
                "text": "Statement Answer",
                "tooltip": "=",
                "break": "false",
                "Properties": {
                    "Variable": "[:000015]",
                    "Name": "MultiCount",
                    "Message": "MultiCount",
                    "ShortName": "Statement Answer",
                    "CountType1": "All",
                    "ShortName1": "Statement Answer",
                    "Operand1_1": "does not equal",
                    "Item": "1",
                    "XMLDoc": "PagePolicyData",
                    "XMLPath": "PagePolicyData\\ValidationMessage\\PageContent\\ACORD\\PersAutoLineBusiness\\QuestionAnswer\\YesNoCd",
                    "XMLPath1": "PagePolicyData\\ValidationMessage\\PageContent\\ACORD\\PersAutoLineBusiness\\QuestionAnswer\\YesNoCd",
                    "XMLCondPath": "Root\\PagePolicyData\\ValidationMessage\\PageContent\\ACORD\\PersAutoLineBusiness\\QuestionAnswer{((YesNoCd != ''))}\\YesNoCd"
                }
            },
            {
                "category": "Comment",
                "location": "450 50",
                "size": "150 38",
                "figure": "RoundedRectangle",
                "text": "Summary Check"
            }
        ],
        "RulesArray": {
            "0": "Check Bypass",
            "1": "Bypass Edorsement",
            "2": "Statement Questions"
        }
    }