Javascript AJAX请求有时会出错
我在发送和接收请求时遇到问题。在我的服务器端,直到发送前一刻,我得到了我所期望的,但在我的客户端,我把事情弄得乱七八糟。例如,这两个应该与我这里的顺序相反: 从服务器{“网格”:[ 在服务器上收到:{“网格”:[“X”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”]、“获胜者”:“} 函数sendData(json){ $.ajax({ 类型:“POST”, url:“/ttt”, 数据:json, 数据类型:“json”, 成功:receiveData() }); } 函数receiveData(){ var响应=$.ajax({ 键入:“获取”, url:“/ttt”, 数据类型:“json”, 成功:函数(){ 网格=response.responseJSON; log(“在客户端接收:+JSON.stringify(grid)); } }); log(“也是在收到”+JSON.stringify(grid)之后);Javascript AJAX请求有时会出错,javascript,jquery,node.js,ajax,express,Javascript,Jquery,Node.js,Ajax,Express,我在发送和接收请求时遇到问题。在我的服务器端,直到发送前一刻,我得到了我所期望的,但在我的客户端,我把事情弄得乱七八糟。例如,这两个应该与我这里的顺序相反: 从服务器{“网格”:[ 在服务器上收到:{“网格”:[“X”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”]、“获胜者”:“} 函数sendData(json){ $.ajax({ 类型:“POST”, url:“/ttt”, 数据:json, 数据类型:“json”, 成功:receiveData() });
}您犯了一个常见的错误。对于
receiveData
,您需要使用不带参数的函数引用。更改此项:
function sendData(json) {
$.ajax({
type: "POST",
url: "/ttt",
data: json,
dataType: "json",
success: receiveData()
});
}
function receiveData() {
var response = $.ajax({
type: "GET",
url: "/ttt",
dataType: "json",
success: function(){
grid = response.responseJSON;
console.log("Receved at client: " + JSON.stringify(grid));
}
});
console.log("Also after receiving " + JSON.stringify(grid));
}
为此:
function sendData(json) {
$.ajax({
type: "POST",
url: "/ttt",
data: json,
dataType: "json",
success: receiveData // no parens here
});
}
当您包含paren时,它会立即调用函数,并将函数的返回值作为成功处理程序,因此您会看到它们无序运行。您希望传递一个函数引用给它,以后可以调用它。函数引用是不带参数的函数名
您似乎在
receiveData()
中又犯了一个错误。您使用了错误的东西作为响应。响应不是从$.ajax()
返回的。响应被传递给成功处理程序
我不知道你的回答应该是什么样子,但改变一下:
function sendData(json) {
$.ajax({
type: "POST",
url: "/ttt",
data: json,
dataType: "json",
success: receiveData()
});
}
function receiveData() {
var response = $.ajax({
type: "GET",
url: "/ttt",
dataType: "json",
success: function(){
grid = response.responseJSON;
console.log("Receved at client: " + JSON.stringify(grid));
}
});
console.log("Also after receiving " + JSON.stringify(grid));
}
对这样的事情:
function receiveData() {
$.ajax({
type: "GET",
url: "/ttt",
dataType: "json",
success: function(response){
grid = response.responseJSON;
console.log("Received at client: " + JSON.stringify(grid));
console.log("Also after receiving " + JSON.stringify(grid));
}
});
}
而且,因为ajax调用是异步的,所以您还有以下语句console.log(“也是在接收到”+JSON.stringify(grid))之后)代码>在错误的位置。如果您想在修改后看到网格的结果,那么必须将其放入成功处理程序中
修复程序摘要
将success:receiveData()
更改为success:receiveData
在将响应传递给成功处理程序时使用response
放置console.log()
以查看success
处理程序中的最终结果
您可能还没有完全理解ajax调用是如何异步的,以及这对您的编程意味着什么。我建议对这个话题进行一些搜索和阅读。现在了解这一点将在你成长的过程中为你省去很多痛苦。非常感谢,就这样。你说得对,我将花一些时间学习ajax以及如何使用它。