关于Nodejs处理Ajax返回不成功的问题

关于Nodejs处理Ajax返回不成功的问题

前台 $.ajax({ type: “POST”, url: “http://127.0.0.1:8081/admin/create.do”, data: “nickname=”+$("#nickname").val(), success :function(){ alert(“a”)//不执行 }, error:function (){ alert(“b”)//执行 } });

NodeJS的部分

 res.send("  var data='name':'yuqj'  ");

请问前台为什么不能执行success 的回调呢, firebug里面也 关于响应的那一部分为空。好纠结,求大大帮忙~~~


5 回复

关于Nodejs处理Ajax返回不成功的问题

前台代码

$.ajax({
    type: "POST",
    url: "http://127.0.0.1:8081/admin/create.do",
    data: "nickname=" + $("#nickname").val(),
    success: function() {
        alert("a"); // 不执行
    },
    error: function() {
        alert("b"); // 执行
    }
});

NodeJS代码

res.send("var data='name':'yuqj'");

问题描述

前端的Ajax请求没有成功执行success回调函数,而是执行了error回调函数。在Firebug中查看响应,发现响应部分为空。

解释

问题出在NodeJS端返回的数据格式不正确。具体来说,res.send方法发送的数据应该是一个有效的JSON对象。当前代码中返回的字符串不是有效的JSON格式,这导致浏览器无法正确解析数据,从而触发了错误回调。

解决方案

正确的做法是确保返回给前端的数据是一个有效的JSON对象。以下是修改后的NodeJS代码:

const express = require('express');
const app = express();

app.post('/admin/create.do', (req, res) => {
    const response = { name: 'yuqj' };
    res.json(response);
});

app.listen(8081, () => {
    console.log('Server is running on port 8081');
});

前端代码调整

确保前端的dataType设置为json,这样jQuery会自动解析返回的数据。

$.ajax({
    type: "POST",
    url: "http://127.0.0.1:8081/admin/create.do",
    data: "nickname=" + $("#nickname").val(),
    dataType: "json", // 设置为json
    success: function(data) {
        alert("Success! Data received: " + JSON.stringify(data));
    },
    error: function() {
        alert("Error occurred");
    }
});

通过上述修改,前端的Ajax请求应该能够正确地接收到服务器返回的数据,并执行success回调函数。


返回json数据才算success 其他都是error

res.send({data: "  var data='name':'yuqj'  "});

谢谢大大,懂你的意思了。

那是不是每次post请求都得返回一个flag,标志一下请求的状态才能确定请求是否成功吗?

根据你提供的信息,问题可能出在 res.send 方法的使用上。在 Node.js 中,使用 res.send 发送数据时,应该确保发送的数据是有效的 JSON 格式,或者直接发送纯文本。

你的 res.send 方法中的字符串格式不正确,这会导致浏览器无法正确解析返回的数据。正确的做法应该是发送一个 JSON 对象或纯文本,并确保 Content-Type 头设置为相应的值。

以下是修改后的示例代码:

Node.js 后端代码

app.post('/admin/create.do', (req, res) => {
    const responseData = { name: 'yuqj' };
    res.json(responseData); // 使用 res.json 方法自动设置 Content-Type 为 application/json
});

或者,如果你只是想发送纯文本数据:

app.post('/admin/create.do', (req, res) => {
    res.send('name: yuqj'); // 直接发送纯文本数据
    res.set('Content-Type', 'text/plain'); // 设置 Content-Type 为 text/plain
});

前端 AJAX 请求

确保你的 AJAX 请求配置正确,以处理 JSON 或纯文本响应:

$.ajax({
    type: "POST",
    url: "http://127.0.0.1:8081/admin/create.do",
    data: "nickname=" + $("#nickname").val(),
    success: function (response) {
        alert("success: " + JSON.stringify(response));
    },
    error: function () {
        alert("error");
    }
});

解释

  • Node.js 后端:使用 res.jsonres.send 发送数据,并确保设置正确的 Content-Type
  • 前端 AJAX:确保 success 回调能够处理预期的数据格式。

通过这些调整,你应该可以看到 success 回调被正确执行。如果问题仍然存在,请检查是否有其他错误或网络问题。

回到顶部