Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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 JQuery ajax/post在数据字段中设置JSON会导致JsonMappingException_Javascript_Jquery_Ajax_Json - Fatal编程技术网

Javascript JQuery ajax/post在数据字段中设置JSON会导致JsonMappingException

Javascript JQuery ajax/post在数据字段中设置JSON会导致JsonMappingException,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我在向服务器发送JQuery帖子时遇到问题。我已将问题缩小到javascript中未正确设置数据字段,这导致了一个异常: org.codehaus.jackson.map.JsonMappingException:无法反序列化 com.myserver.rest.messages.dto.NewMessageDTO的实例 启动外\u数组令牌 工作正常但不太干净的代码: $.ajax({ type: "POST", url: "

我在向服务器发送JQuery帖子时遇到问题。我已将问题缩小到javascript中未正确设置数据字段,这导致了一个异常:

org.codehaus.jackson.map.JsonMappingException:无法反序列化 com.myserver.rest.messages.dto.NewMessageDTO的实例 启动外\u数组令牌

工作正常但不太干净的代码:

     $.ajax({
               type: "POST",
               url: "../resources/messages/",
               data: '{"subject": "' + subject +
                     '", "message": "' + message +
                     '", "messageType": "' + type +
                     '", "employeeIDs": [' + employeeIDs +
                     '], "assignmentIDs": [' + assignmentIDs +']}',
               contentType: "application/json",
               success: successHandler,
               error: defaultErrorHandler
            });
这使得:

{“主题”:“测试”,“消息”:“测试”,“消息类型”:“消息”,“员工ID”:[461485],“分配ID”:[103]}

不起作用,但更干净的代码:

            $.ajax({
               type: "POST",
               url: "../resources/messages/",
               data: {'subject': subject, 'message': message, 'messageType': type, 'employeeIDs[]': employeeIDs, 'assignmentIDs[]': assignmentIDs},
               contentType: "application/json",
               success: successHandler,
               error: defaultErrorHandler
            });
由于某些原因,它呈现为application/x-www-form-urlencoded:

主题=测试和消息=测试和消息类型=消息和员工ID%5B%5D=461和员工ID%5B%5D=485和分配ID%5B%5D=103


你知道我做错了什么吗?提前感谢您的帮助

试试这个,它会工作得很好,而且更干净

       $.ajax({
           type: "POST",
           url: "../resources/messages/",
           data: {
                subject: subject, 
                message: message, 
                messageType: type, 
                employeeIDs: employeeIDs, 
                assignmentIDs: assignmentIDs
           },
           contentType: "application/json",
           success: successHandler,
           error: defaultErrorHandler
        });

代码第一部分的问题是,您将整个数据作为一个字符串发送,其中每个数据属性都应该是一个键/值对。在第二部分中,您没有为数组字段正确创建键名。您不必为数组字段包含
[]

试试这个,它应该工作得很好,而且更干净

       $.ajax({
           type: "POST",
           url: "../resources/messages/",
           data: {
                subject: subject, 
                message: message, 
                messageType: type, 
                employeeIDs: employeeIDs, 
                assignmentIDs: assignmentIDs
           },
           contentType: "application/json",
           success: successHandler,
           error: defaultErrorHandler
        });

代码第一部分的问题是,您将整个数据作为一个字符串发送,其中每个数据属性都应该是一个键/值对。在第二部分中,您没有为数组字段正确创建键名。您不必为数组字段包含
[]

数组有点古怪,请尝试以下方法:

{'subject': subject, 'message': message, 'messageType': type, 'employeeIDs': employeeIDs, 'assignmentIDs': assignmentIDs}
这假设
employeeid
assignmentid
是数组


这是一个演示:

阵列有点古怪,试试这个:

{'subject': subject, 'message': message, 'messageType': type, 'employeeIDs': employeeIDs, 'assignmentIDs': assignmentIDs}
这假设
employeeid
assignmentid
是数组


这里是一个演示:

在您的工作示例中,您有名为
employeeIDs
assignmentIDs
的变量,但在非工作代码中,您添加了
[]
在每个变量的末尾。

在您的工作示例中,您有名为
EmployeeId
AssignmentId的变量,但在非工作代码中,您在每个变量的末尾追加了
[]

在JSON模式中,字符串只有用双引号括起来时才有效:。很多实现对此并不严格,但看起来您的服务器的实现是严格的

在JSON模式中,字符串只有用双引号括起来时才有效:。很多实现对此并不严格,但看起来您的服务器的实现是严格的

contentType:“application/json”
表示调用的结果是json。所有数据都在发送之前

不太干净的代码将数据作为JSON字符串发送,这显然是
。/resources/messages/
所期望的

要使其更清晰并将数据保持为JSON字符串,请执行以下操作:

$.ajax({
    'type': 'POST',
    'url': '../resources/messages/',
    'data': '{' +
        "'subject':" + subject + ','
        "'message':" message + ','
        "'messageType':" type + ','
        "'employeeIDs':[" employeeIDs + '],'
        "'assignmentIDs':[" assignmentIDs + ']' +
    '}',
    'contentType': "application/json",
    'success': successHandler,
    'error': defaultErrorHandler
});

希望这有帮助

Pete

contentType:“application/json”
表示调用的结果是json。所有数据都在发送之前

不太干净的代码将数据作为JSON字符串发送,这显然是
。/resources/messages/
所期望的

要使其更清晰并将数据保持为JSON字符串,请执行以下操作:

$.ajax({
    'type': 'POST',
    'url': '../resources/messages/',
    'data': '{' +
        "'subject':" + subject + ','
        "'message':" message + ','
        "'messageType':" type + ','
        "'employeeIDs':[" employeeIDs + '],'
        "'assignmentIDs':[" assignmentIDs + ']' +
    '}',
    'contentType': "application/json",
    'success': successHandler,
    'error': defaultErrorHandler
});

希望这有帮助


皮特

我也试过了,但运气不好。它仍在将json转换为application/x-www-form-urlencodedy,然后您可以在服务器端代码中将其解码为对象。我使用PHP,在PHP中有一个
json\u decode()
函数,它接受一个字符串并返回一个对象。如果您能解释投票结果是否被否决,我们将不胜感激。投票被否决的原因很可能是我想知道的。谢谢。@TravisNelson
json\u decode
可能不是你想要的。我在考虑这个问题,你只需要反序列化服务器端脚本中的变量。很抱歉,投票失败了,但是你的答案不起作用,我不希望其他人读到这个错误的方向。我也尝试了这个,但运气不好。它仍在将json转换为application/x-www-form-urlencodedy,然后您可以在服务器端代码中将其解码为对象。我使用PHP,在PHP中有一个
json\u decode()
函数,它接受一个字符串并返回一个对象。如果您能解释投票结果是否被否决,我们将不胜感激。投票被否决的原因很可能是我想知道的。谢谢。@TravisNelson
json\u decode
可能不是你想要的。我在考虑这个问题,你只需要反序列化服务器端脚本中的变量。很抱歉,投票失败了,但你的答案不起作用,我不希望其他阅读此内容的人走错方向。不,这不起作用。EmployeeId和AssignmentId都是数组,因此不确定如何处理到jsonSorry的转换,关于下一票,但您的答案不起作用,我不希望其他阅读此内容的人走错方向,这是因为您没有在问题中指定完整的信息。我如何知道
employeeIDs
不是数组并且包含逗号分隔的员工ID?这同样适用于AssigmentID。如果我知道的话,我的答案会解决的。不,这不起作用。EmployeeId和AssignmentId都是数组,因此不确定如何处理到jsonSorry的转换,关于下一票,但您的答案不起作用,我不希望其他阅读此内容的人走错方向,这是因为您没有在问题中指定完整的信息。我如何知道
employeeIDs
不是数组并且包含逗号分隔的员工ID?这同样适用于AssigmentID。如果我知道的话,