错误:AJAX响应中的AJAX调用

时间:2017-03-14 16:31:40

标签: javascript jquery json ajax post

我正在使用文件与API进行交互。首先,API发送一些HTML和Javascript来创建搜索表单,然后API可以处理该搜索表单的查询。

我的第二个请求有一些问题,在第一个请求的成功函数中调用(这似乎是问题!)。这是我正在使用的代码。

var n = 3;
str.match(new RegExp(".{0," + n + "}", "g"));

在尝试解析响应时,我得到了意外的令牌:o。如果我在第一个ajax请求之外运行此代码,如下所示:

$.ajax({
  type: "POST",
  url: "https://vq3rsgkd94.execute-api.us-east-1.amazonaws.com/deploy",
  crossDomain: true,
  data: JSON.stringify({
    "stage": "load",
    "fields": ["first_name", "last_name", "graduation_year"]
  }),

  success: function(response) {
    response = JSON.parse(response);
    $(response.html).prependTo("#content");
    $(response.scripts).appendTo("body");
  },

  complete: function() {
    //get field inputs
    var fieldInput = {
      "first_name_query": "",
      "last_name_query": "",
      "graduation_year_query": ""
    };

    $('form').find('input[type=search]').each(function(index, value) {
      var variableName = value.name;
      var fieldId = "#" + value.name;

      $(fieldId).keyup(function() {
          variableName = $(this).val();
          fieldInput[value.name + "_query"] = variableName
          console.log(value.name + ":" + fieldInput[value.name + "_query"]);
        })
        .keyup();
    });

    $('#search_form').submit(function(event) {
      event.preventDefault();
      $.ajax({
        type: "POST",
        url: "https://vq3rsgkd94.execute-api.us-east-1.amazonaws.com/deploy",
        data: JSON.stringify({
          "stage": "search",
          "fields": ["first_name", "last_name", "graduation_year"],
          "query": {
            "first_name": fieldInput["first_name_query"]
          }
        }),

        success: function(response) {
          response = JSON.parse(response);
          console.log(response);
        }
      });

    })

  }
});

我没有任何问题,代码正常执行。所以问题似乎是在另一个成功响应中运行一个Ajax调用,但我不知道为什么?我可以用另一种方式做事,但是想知道是否有人对这为什么不起作用有所了解。

2 个答案:

答案 0 :(得分:2)

您收到的错误表明您尝试使用JSON.parse解析对象 因为

var x = {}
console.log(x.toString()) //> [object Object]
JSON.parse(x)
// Uncaught SyntaxError: Unexpected token o in JSON at position 1
//    at JSON.parse (<anonymous>)
//    at <anonymous>:3:6

你确定第二种情况下响应是一个字符串

而不是显式转换JSON允许jquery使用dataType: 'json'

为您解析它
$.ajax({
  type: "POST",
  url: "https://vq3rsgkd94.execute-api.us-east-1.amazonaws.com/deploy",
  data: JSON.stringify({
    "stage":"search",
    "fields":["first_name","last_name","graduation_year"],
    "query":{"first_name": fieldInput["first_name_query"] }
  }),
  dataType: 'json'
)}

答案 1 :(得分:1)

所以问题最终变得非常奇怪。我正在为Nationbuilder平台开发一个API(也许是我的第一个错误)。由于未知原因,Nationbuilder正在为任何请求附加真实性令牌,我的基于LAMBDA的API无法解析。为了防止其他人和我在同一条非常小的船上,我最终使用GET请求而不是POST请求,并且Nationbuilder停止附加真实性令牌。

此外,如果有人使用Lambda,我最终切换到Digital Ocean托管的Express JS,并且更加快乐。