为什么Ajax发布编码数据而不是JSON

时间:2019-08-17 16:20:29

标签: jquery json ajax aws-lambda

我有一个Ajax POST,它对数据进行编码,而不是以JSON格式发送数据。我必须丢失某些东西,但无法缩小范围。该API可在失眠状态下运行,但不能通过代码运行。

我将content-Type设置为application / json,并且尝试将contentType设置为false并明确指定了标头。主机以任何一种方式接收应用程序/ json。我尝试过以字符串,对象和函数形式进行发送。

data: jsonPacket,
data: JSON.stringify(jsonPacket),
data:function () {
   return "foo bar";
}

所有尝试都会产生编码后的文本。

构建json对象

          JSONpacket = {
            "Destination": {
              "ToAddresses": [
                $('email').val()
              ],
                "BccAddresses": [
                  "sombody@somewhere.com"
                ]
            },
            "Message": {
              "Body": {
                "Text": {
                  "Data" : "Test email",
                }
              },
              "Subject": {
                "Data": "Message received from Website"
              }
            },
            "Source": "nobody@nowhere.com"
          };

拨打电话

          $.ajax({
            type: "POST",
            url: "https://x9beos0tm4.execute-api.us-west-2.amazonaws.com/stage/<sanitized>",
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            headers: {
              "x-Api-Key": '**************************'
            },
            data: JSONstringify(JSONpacket),
            success: function (data, status) {
              $('#email_response').html(data);
              $('#email_response').addClass('alert alert-success');
              $('#email_response').slideDown();
              setTimeout(function (e) {
                $('#email_response').slideUp();
                $('#email_response').val('');
                $('#email_response').removeClass('alert alert-success');
                $('#email').val('');
                $('#name').val('');
                $('#phone').val('');
                $('#message').text('');
              }, 15000);
            },
            error: function (xhr, status, errMessage) {
              if (errMessage == "")
                errMessage = xhr.statusText + " : " + xhr.status + ' - ' + xhr.responseJSON.message;
              $('#email_response').addClass('alert alert-danger');
              $('#email_response').html(errMessage);
              $('#email_response').slideDown();
              setTimeout(function (e) {
                $('#email_response').slideUp();
                $('#email_response').html('');
                $('#email_response').removeClass('alert alert-danger');
              }, 15000);
            }
          });

从ajax调用时收到的数据

"Destination%5BToAddresses%5D%5B%5D=sombodey%40somewhere.com&Destination%5BBccAddresses%5D%5B%5D=someonelse%40somewhere.com&Destination%5BBccAddresses%5D%5B%5D=nobody%40nowhere.com&Message%5BBody%5D%5BText%5D%5BData%5D=****+****+contact+Email%0D%0ASent+on+Saturday+August8+17th+2019+%40+10%3A04+am%0D%0A%0D%0AName%3A+******+*********%0D%0AEmail%3A+sombody%40somewhere.com%0D%0APhome%3A+9999999999%0D%0AMessage%3A%0D%0Asdffg%0D%0A&Message%5BSubject%5D%5BData%5D=Message+received+from+Website&Source=nobody%40nowhere.com

从失眠症(如邮递员)打电话时收到的数据

"body": "{\n  \"Destination\": {\n    \"ToAddresses\": [\n      \"somebody@somewhere.com\",\n        \"somebodyelse@somewhere.com\"    ]\n  },\n  \"Message\": {\n    \"Body\": {\n      \"Text\": {\n        \"Data\": \"Test email body from API\"\n      }\n    },\n    \"Subject\": {\n      \"Data\": \"Different Test Email Subject FROM API\"\n    }\n  },\n  \"Source\": \"webadmin@nowhere.com\"\n}"

2 个答案:

答案 0 :(得分:0)

已解决

愚蠢的人类把戏

两个问题:

CREATE DEFINER=`pro`@`%` PROCEDURE `get_rand`()
BEGIN
DECLARE regenerateNumber BOOLEAN default true;
declare regNum int;
declare cn varchar(255);
repeat
SET regNum      := FLOOR(RAND()*90000000+10000000);
SET cn =(SELECT count(*) FROM stock WHERE id = regNum);
select regNum;
if cn=0
then
SET regenerateNumber = false;
end if;
UNTIL regenerateNumber=false
end repeat;
END

答案 1 :(得分:0)

\ n字符是在JSON.stringify中转换后的换行符。如果对它执行JSON.parse,则将获得不带\ n字符的原始对象。