Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将复杂Javascript变量作为JSON发送将返回400个错误_Javascript_C#_Jquery_Json_Json.net - Fatal编程技术网

将复杂Javascript变量作为JSON发送将返回400个错误

将复杂Javascript变量作为JSON发送将返回400个错误,javascript,c#,jquery,json,json.net,Javascript,C#,Jquery,Json,Json.net,我有以下设置 在客户端,我使用了一个复杂的Javascript变量 var order = { name:"", id:"", cost:"", details:{ sItem:[{name:"",cost:""}], dItem:[{name:"",cost:"", components:[{name:

我有以下设置

在客户端,我使用了一个复杂的Javascript变量

var order = {
             name:"",
             id:"",
             cost:"",
             details:{
                      sItem:[{name:"",cost:""}], 
                      dItem:[{name:"",cost:"", components:[{name:"",quantity:""}]}]
                     }
            }
我在服务器上有一个c语言的控制器,就像这样

    public string getCost(string order)
    {
        var sOrder = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(order);
//do the processing here
        return "I am processed";
    } 
问题是当我发送这个请求时,服务器会以错误的请求响应,但是如果我附加一个简单的字符串,比如“hello”,而不是JSON.stringify(order)。控制器接收到它并成功返回,没有问题,因此我知道问题出在将订单转换为JSON的过程中,但不知道如何找到答案


是的,我正在使用getJSON并返回一个简单的字符串,但这不是问题,因为我将在处理完成后返回一个JSON字符串。实际上,在某些属性值发生更改的情况下,接收到的JSON将是相同的。

我使用了$.get、$.post、$.getJSON等。当我让其中一些对象工作时,它们总是返回jqXHR,即使响应是序列化的JSON对象。 以下是我成功的唯一途径。(请注意,我正在访问一个web服务。)


$(文档).ready(函数(){
$.ajax({
url:“WebService1.asmx/GetAList”,
//数据:JSON.stringify({s:parms}),
键入:“post”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(数据、状态){
var contries=JSON.parse(data.d);
$(“#sel2”)。选择2({data:contries});
},
错误:函数(一,二){
调试器;
}
});
});
从ajax填充

和我的网络服务

使用System.Web.Script.Services

    namespace WebApplication1
    {    // a class in context with how the data are is being used
        [Serializable]
        public class select2Item
        {
            public String id { get; set; }
            public String text { get; set; }
            public select2Item(String code, String name)
            {
                this.id = code;
                this.text = name;
            }
            public select2Item() { }
        }

        /// <summary>
        /// Summary description for WebService1
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        [System.Web.Script.Services.ScriptService]
        public class WebService1 : System.Web.Services.WebService
        {


            [WebMethod]
            public string GetAList()
            {
                System.Web.Script.Serialization.JavaScriptSerializer ser = new System.Web.Script.Serialization.JavaScriptSerializer();
                return makelist();
            }

             // return a list of serialized codes and countries
            public String makelist()
            {
                List<select2Item> list = new List<select2Item>();

                list.Add(new select2Item("AI", "Anguilla"));
                list.Add(new select2Item("AQ", "Antarctica"));
                list.Add(new select2Item("AG", "Antigua and Barbuda"));
                list.Add(new select2Item("AR", "Argentina"));
                list.Add(new select2Item("AM", "Armenia"));
                list.Add(new select2Item("AW", "Aruba"));
                list.Add(new select2Item("AU", "Australia"));
                list.Add(new select2Item("AT", "Austria"));
                list.Add(new select2Item("AZ", "Azerbaijan"));
                list.Add(new select2Item("BS", "Bahamas"));
                list.Add(new select2Item("BH", "Bahrain"));
                list.Add(new select2Item("BD", "Bangladesh"));
                list.Add(new select2Item("BB", "Barbados"));
                list.Add(new select2Item("BY", "Belarus"));
                list.Add(new select2Item("BE", "Belgium"));
                list.Add(new select2Item("BZ", "Belize"));
                // did it this way to show you which to use
                System.Web.Script.Serialization.JavaScriptSerializer ser = new System.Web.Script.Serialization.JavaScriptSerializer();
                String jsonList = ser.Serialize(list);
                return jsonList;
            }
         }
    }
命名空间WebApplication1
{//上下文中的一个类,说明如何使用数据
[可序列化]
公共类select2Item
{
公共字符串id{get;set;}
公共字符串文本{get;set;}
public select2Item(字符串代码、字符串名称)
{
this.id=代码;
this.text=名称;
}
public select2Item(){}
}
/// 
///WebService 1的摘要说明
/// 
[WebService(命名空间=”http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
公共类WebService 1:System.Web.Services.WebService
{
[网络方法]
公共字符串GetAList()
{
System.Web.Script.Serialization.JavaScriptSerializer ser=new System.Web.Script.Serialization.JavaScriptSerializer();
返回makelist();
}
//返回序列化代码和国家/地区的列表
公共字符串生成列表()
{
列表=新列表();
添加(新选择2项(“AI”、“安圭拉”);
添加(新选择2项(“AQ”、“南极洲”);
添加(新选择2项(“AG”、“安提瓜和巴布达”);
添加(新选择2项(“AR”、“阿根廷”);
添加(新选择2项(“AM”、“亚美尼亚”);
添加(新的select2Item(“AW”、“Aruba”);
列表。添加(新的select2Item(“AU”、“Australia”);
添加(新的select2Item(“AT”,“Austria”);
添加(新的select2Item(“AZ”、“阿塞拜疆”);
添加(新选择2项(“BS”、“巴哈马”);
添加(新选择2项(“BH”、“巴林”);
添加(新选择2项(“BD”、“孟加拉”);
添加(新选择2项(“BB”、“巴巴多斯”);
添加(新的select2Item(“BY”,“白俄罗斯”));
添加(新选择2项(“BE”、“比利时”);
添加(新的select2Item(“BZ”、“伯利兹”);
//这样做是为了告诉你该用哪个
System.Web.Script.Serialization.JavaScriptSerializer ser=new System.Web.Script.Serialization.JavaScriptSerializer();
字符串jsonList=ser.Serialize(列表);
返回jsonList;
}
}
}

您不想发送id而不是完整的json吗?您不能通过URL发送json,某些字符可能不受支持。在某些情况下,嵌套结构中的项目没有Id,因此我需要发送所有order对象。此外,如果服务器端和客户端只需要处理一个公共对象,部分由客户端填充,部分由服务器填充,那么这将使服务器端和客户端都变得容易;这是假设一个ID。如果你确实需要发送数据,做一个POST请求,而不是传递到URL。哦,是的,我已经纠正了它。你是说调用postJSON而不是getJSON吗?或者其他我希望下面的帖子能帮助你。
       <script type="text/javascript">

        $(document).ready(function () {

            $.ajax({
                url: "WebService1.asmx/GetAList",
             //   data: JSON.stringify({ s: parms }),
                type: 'post',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data, status) {
                    var contries = JSON.parse(data.d);
                    $("#sel2").select2({ data: contries });
                },
                error: function (one, two) {
                    debugger;
                }
            });
        });
            </script>


        </head>
        <body>
            <form>
                <div>
                    <p>populated from ajax</p>
                    <select style="width:175px" id="sel2"></select>
                </div>
            </form>
        </body>
</html>
    namespace WebApplication1
    {    // a class in context with how the data are is being used
        [Serializable]
        public class select2Item
        {
            public String id { get; set; }
            public String text { get; set; }
            public select2Item(String code, String name)
            {
                this.id = code;
                this.text = name;
            }
            public select2Item() { }
        }

        /// <summary>
        /// Summary description for WebService1
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        [System.Web.Script.Services.ScriptService]
        public class WebService1 : System.Web.Services.WebService
        {


            [WebMethod]
            public string GetAList()
            {
                System.Web.Script.Serialization.JavaScriptSerializer ser = new System.Web.Script.Serialization.JavaScriptSerializer();
                return makelist();
            }

             // return a list of serialized codes and countries
            public String makelist()
            {
                List<select2Item> list = new List<select2Item>();

                list.Add(new select2Item("AI", "Anguilla"));
                list.Add(new select2Item("AQ", "Antarctica"));
                list.Add(new select2Item("AG", "Antigua and Barbuda"));
                list.Add(new select2Item("AR", "Argentina"));
                list.Add(new select2Item("AM", "Armenia"));
                list.Add(new select2Item("AW", "Aruba"));
                list.Add(new select2Item("AU", "Australia"));
                list.Add(new select2Item("AT", "Austria"));
                list.Add(new select2Item("AZ", "Azerbaijan"));
                list.Add(new select2Item("BS", "Bahamas"));
                list.Add(new select2Item("BH", "Bahrain"));
                list.Add(new select2Item("BD", "Bangladesh"));
                list.Add(new select2Item("BB", "Barbados"));
                list.Add(new select2Item("BY", "Belarus"));
                list.Add(new select2Item("BE", "Belgium"));
                list.Add(new select2Item("BZ", "Belize"));
                // did it this way to show you which to use
                System.Web.Script.Serialization.JavaScriptSerializer ser = new System.Web.Script.Serialization.JavaScriptSerializer();
                String jsonList = ser.Serialize(list);
                return jsonList;
            }
         }
    }