我正在使用文件与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调用,但我不知道为什么?我可以用另一种方式做事,但是想知道是否有人对这为什么不起作用有所了解。
答案 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,并且更加快乐。