Javascript 错误:AJAX响应中的AJAX调用
我正在使用一个与API交互的文件。首先,API发送一些HTML和Javascript来创建搜索表单,然后API可以处理该搜索表单的查询 我的第二个请求遇到了一些问题,在第一个请求的success函数中调用了第二个请求(这似乎就是问题所在!)。这是我正在使用的代码Javascript 错误:AJAX响应中的AJAX调用,javascript,jquery,json,ajax,post,Javascript,Jquery,Json,Ajax,Post,我正在使用一个与API交互的文件。首先,API发送一些HTML和Javascript来创建搜索表单,然后API可以处理该搜索表单的查询 我的第二个请求遇到了一些问题,在第一个请求的success函数中调用了第二个请求(这似乎就是问题所在!)。这是我正在使用的代码 $.ajax({ type: "POST", url: "https://vq3rsgkd94.execute-api.us-east-1.amazonaws.com/deploy", crossDomain: true,
$.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);
}
});
})
}
});
当试图解析响应时,我得到了意外的标记:o。如果我在第一个ajax请求之外运行此代码,如下所示:
$.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": "Bob"
}
}),
success: function(response) {
response = JSON.parse(response);
console.log(response);
}
});
我没有任何问题,代码执行正常。所以问题似乎是在另一个成功响应中运行一个Ajax调用,但我不知道为什么?我可能可以用另一种方式来做,但我想看看是否有人了解为什么这样做不起作用。您收到的错误表明您正在尝试使用JSON解析对象。parse 自
您收到的错误表明您正在尝试使用
JSON.parse来解析对象
自
所以这个问题最终变得很奇怪。我正在为Nationbuilder平台开发一个API(可能是我的第一个错误)。出于未知的原因,Nationbuilder将真实性令牌附加到任何请求中,而我基于LAMBDA的API无法解析该请求。为了防止其他人和我在同一条非常小的船上,我最终使用GET请求而不是POST请求,并且Nationbuilder停止附加真实性令牌
此外,如果有人在使用Lambda,我最终会切换到Digital Ocean托管的Express JS,我会更开心。因此问题变得非常奇怪。我正在为Nationbuilder平台开发一个API(可能是我的第一个错误)。出于未知的原因,Nationbuilder将真实性令牌附加到任何请求中,而我基于LAMBDA的API无法解析该请求。为了防止其他人和我在同一条非常小的船上,我最终使用GET请求而不是POST请求,并且Nationbuilder停止附加真实性令牌
此外,如果有人在使用Lambda,我最终选择了Digital Ocean托管的Express JS,我会更开心。为什么不呢?-如果它是JSON,jQuery将使它成为一个对象……为什么不进行委托绑定呢?-如果是JSON,jQuery将使其成为一个对象……实际上,当我设置断点并执行console.log(response)时,我会得到对象{errorMessage:“意外标记&”,errorType:“SyntaxError”,stackTrace:Array[0]},如果执行console.log(response.toString()),我会得到[object object],这解释了我最初的错误。我尝试设置数据类型:“json”,但没有任何更改。我建议您对html和代码进行修改。这将更好地帮助人们理解你的问题我做了一个密码笔,密码笔工作了。。。这意味着这与Nationbuilder网站有关,因此我将不得不跟进他们。感谢您的帮助。实际上,当我设置断点并执行console.log(response)时,我会得到对象{errorMessage:“意外令牌&”,errorType:“SyntaxError”,stackTrace:Array[0]},如果执行console.log(response.toString()),我会得到[Object Object],这解释了我最初的错误。我尝试设置数据类型:“json”,但没有任何更改。我建议您对html和代码进行修改。这将更好地帮助人们理解你的问题我做了一个密码笔,密码笔工作了。。。这意味着这与Nationbuilder网站有关,因此我将不得不跟进他们。谢谢你的帮助。我和你在同一条很小的船上。这是多么奇怪的事啊。建国者一点帮助都没有,我帮了!因此Nationbuilder使用液体模板引擎,每个页面中都包含一个缩小的文件。此页面包含一个AJAX事件处理程序,它绑定到jQuery提供的beforeSend
。此事件处理程序检测请求是查询字符串还是对象,并将“有益地”尝试将真实性令牌作为属性分别附加或添加到请求中。但是,这种检查是幼稚的:当您将JSON对象字符串化为请求主体时,这会发生在调用beforeSend
事件之前。因此,在检查发生时,您的(1/2)…主体现在是一个字符串。此事件处理程序错误地假定任何字符串都是查询字符串的形式。这就是为什么将真实性标记作为查询字符串附加到对象中的原因。解决方案是什么?jQuery的$.ajax对象包含一个选项global
,该选项防止事件处理程序附加到请求-这避开了附加的真实性令牌。将global
设置为true
:)我和你在同一条非常小的船上。这是多么奇怪的事啊。建国者一点帮助都没有,我帮了!因此Nationbuilder使用液体模板引擎,每个页面中都包含一个缩小的文件。此页面包含一个AJAX事件处理程序,它绑定到jQuery提供的beforeSend
。此事件处理程序检测请求是查询字符串还是对象,并将“有益地”尝试将真实性令牌作为属性分别附加或添加到请求中。但是,这种检查是幼稚的:当您将JSON对象字符串化为请求主体时,这会发生在调用beforeSend
事件之前。因此,在检查发生时,您的(1/2)…主体现在是一个字符串。此事件处理程序错误地假定任何字符串都是查询字符串的形式。这就是为什么将真实性标记作为查询字符串附加到对象中的原因。解决方案是什么?jQuery的$.ajax对象包含一个选项global
,该选项防止事件处理程序附加到请求-这避开了附加的真实性令牌。将global
设置为true
:)(2/2)
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
$.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'
)}