Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all 14821 articles
Browse latest View live

有没有谁知道怎么用node做rtmp代理?

$
0
0

有木有现成的轮子?还是要自己吃透rtmp协议自己写?


Masq - 适用于 Web 开发环境的 DNS server

$
0
0

Masq

Masq是一个简单的本地 DNS 服务器,类似于 DNSMasq。第一个版本来自于 Pow

请注意:Masq 目前仅适用于 macOS。

本地 DNS

因为不能在 /etc/hosts文件中使用通配符,无法实现类似功能:

127.0.0.1 *.dev.

为了解决这个问题,需要安装一个类似于 DNSMasq 的 DNS 代理。如果你是一个 JavaScript 开发者,你可以尝试一下 Masq。

开始

Masq(或者 Pow)的 DnsServer被设计为对指定的顶级域名(及其子域名)的 DNS A查询响应 IP 地址 127.0.0.1。 当与 Mac OS X的 /etc/resolver system结合使用时,不需要添加和删除本地Web开发的主机名等类似配置。

安装

$ npm install -g masq

使用

用户配置文件 ~/.masqconfig在服务启动时读取执行。 您可以配置顶级域,监听端口等选项。如:

export MASQ_DOMAINS=dev,test

然后你可以运行 masq --print-config,将会得到如下输出:

$ masq --print-config
MASQ_BIN='/path/to/masq/bin/masq'
MASQ_DNS_PORT='20560'
MASQ_DOMAINS='dev,test'
MASQ_EXT_DOMAINS=''
MASQ_LOG_ROOT='/path/to/Library/Logs/Masq'

如果一切正常,运行 masq --install-system来安装系统 DNS 配置文件(需要 root 权限):

$ sudo masq --install-system

最后运行 DNS 服务器:

masq

现在,试着 ping 任何以 .dev 结尾的地址,应该返回的 IP 地址是 127.0.0.1:

$ ping example.dev
PING example.dev (127.0.0.1): 56 data bytes

运行守护进程

生产守护进程配置文件:

$ masq --install-local

然后:

launchctl load ~/Library/LaunchAgents/cx.masq.masqd.plist

参考链接

Nuxt.js+express该如何部署

$
0
0

我最近决定上线一个Vue SSR项目,使用的是Nuxt.js+express+mysql,代码已经有个样子了,于是决定到线上跑一下! 我是这样构想的: 将项目在Linux上跑起来(使用PM2),使用Nginx将80端口代理到node端口上! 我遇到了以下问题: 在我的电脑本地,使用以下命令可以正常运行:

npm run build
npm start

但是使用pm2时确跑不起来,这是脚本:

pm2 start npm --name 'justyeh' -- start

错误日志里面包含了许多这样的信息:

D:\NODEJS\NPM.CMD:1
(function (exports, require, module, __filename, __dirname) { :: Created by npm, please don't edit manually.
                                                              ^
SyntaxError: Unexpected token :
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)
    at Module._compile (module.js:542:28)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Object.<anonymous> (C:\Users\yeh\AppData\Roaming\npm\node_modules\pm2\lib\ProcessContainerFork.js:53:21)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)

我在纠结的是部署的思路是否正确,如果错了,大家能否为我提供一个思路; 如果这样思路是对的,如何解决这个问题?

Promise是Monad吗?

$
0
0

译者按:近年来,函数式语言的特性都被其它语言学过去了。

原文: Functional Computational Thinking — What is a monad?

译者: Fundebug

为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

如果你使用函数式编程,不管有没有用过函数式语言,在某总程度上已经使用过Monad。可能大多数人都不知道什么叫做Monad。在这篇文章中,我不会用数学公式来解释什么是Moand,也不使用Haskell,而是用JavaScript直接写Monad。

作为一个函数式程序员,我首先来介绍一下基础的复合函数:

const add1 = x => x + 1
const mul3 = x => x * 3

const composeF = (f, g) => {
  return x => f(g(x))
}

const addOneThenMul3 = composeF(mul3, add1)
console.log(addOneThenMul3(4)) // 打印 15

复合函数composeF接收fg两个参数,然后返回值是一个函数。该函数接收一个参数x, 先将函数g作用到x, 其返回值作为另一个函数f的输入。

addOneThenMul3是我们通过composeF定义的一个新的函数:由mul3add1复合而成。

接下来看另一个实际的例子:我们有两个文件,第一个文件存储了第二个文件的路径,第二个文件包含了我们想要取出来的内容。使用刚刚定义的复合函数composeF, 我们可以简单的搞定:

const readFileSync = path => {
  return fs.readFileSync(path.trim()).toString()
}

const readFileContentSync = composeF(readFileSync, readFileSync)
console.log(readFileContentSync('./file1'))

readFileSync是一个阻塞函数,接收一个参数path,并返回文件中的内容。我们使用composeF函数将两个readFileSync复合起来,就达到我们的目的。是不是很简洁?

但如果readFile函数是异步的呢?如果你用Node.js写过代码的话,应该对回调很熟悉。在函数式语言里面,有一个更加正式的名字:continuation-passing style 或则 CPS。

我们通过如下函数读取文件内容:

const readFileCPS = (path, cb) => {
  fs.readFile(
    path.trim(),
    (err, data) => {
      const result = data.toString()
      cb(result)
    }
  )
}

但是有一个问题:我们不能使用composeF了。因为readCPS函数本身不在返回任何东西。 我们可以重新定义一个复合函数composeCPS,如下:

const composeCPS = (g, f) => {
  return (x, cb) => {
    g(x, y => {
      f(y, z => {
        cb(z)
      })
    })
  }
}

const readFileContentCPS = composeCPS(readFileCPS, readFileCPS)
readFileContentCPS('./file1', result => console.log(result))

注意:在composeCPS中,我交换了参数的顺序。composeCPS会首先调用函数g,在g的回调函数中,再调用f, 最终通过cb返回值。

接下来,我们来一步一步改进我们定义的函数。

第一步,我们稍微改写一下readFIleCPS函数:

const readFileHOF = path => cb => {
  readFileCPS(path, cb)
}

HOF是 High Order Function (高阶函数)的缩写。我们可以这样理解readFileHOF: 接收一个为path的参数,返回一个新的函数。该函数接收cb作为参数,并调用readFileCPS函数。

并且,定义一个新的复合函数:

const composeHOF = (g, f) => {
  return x => cb => {
    g(x)(y => {
      f(y)(cb)
    })
  }
}

const readFileContentHOF = composeHOF(readFileHOF, readFileHOF)
readFileContentHOF('./file1')(result => console.log(result))

第二步,我们接着改进readFileHOF函数:

const readFileEXEC = path => {
  return {
    exec: cb => {
      readFileCPS(path, cb)
    }
  }
}

readFileEXEC函数返回一个对象,对象中包含一个exec属性,而且exec是一个函数。

同样,我们再改进复合函数:

const composeEXEC = (g, f) => {
  return x => {
    return {
      exec: cb => {
        g(x).exec(y => {
          f(y).exec(cb)
        })
      }
    }
  }
}

const readFileContentEXEC = composeEXEC(readFileEXEC, readFileEXEC)
readFileContentEXEC('./file1').exec(result => console.log(result))

现在我们来定义一个帮助函数:

const createExecObj = exec => ({exec})

该函数返回一个对象,包含一个exec属性。 我们使用该函数来优化readFileEXEC函数:

const readFileEXEC2 = path => {
  return createExecObj(cb => {
    readFileCPS(path, cb)
  })
}

readFileEXEC2接收一个path参数,返回一个exec对象。

接下来,我们要做出重大改进,请注意! 迄今为止,所以的复合函数的两个参数都是huan’hnh函数,接下来我们把第一个参数改成exec对象。

const bindExec = (execObj, f) => {
  return createExecObj(cb => {
    execObj.exec(y => {
      f(y).exec(cb)
    })
  })
}

bindExec函数返回一个新的exec对象。

我们使用bindExec来定义读写文件的函数:

const readFile2EXEC2 = bindExec(
  readFileEXEC2('./file1'),
  readFileEXEC2
)
readFile2EXEC2.exec(result => console.log(result))

如果不是很清楚,我们可以这样写:

bindExec(
  readFileEXEC2('./file1'),
  readFileEXEC2
)
.exec(result => console.log(result))

我们接下来把bindExec函数放入exec对象中:

const createExecObj = exec => ({
  exec,
  bind(f) {
    return createExecObj(cb => {
      this.exec(y => {
        f(y).exec(cb)
      })
    })
  }
})

如何使用呢?

readFileEXEC2('./file1')
.bind(readFileEXEC2)
.exec(result => console.log(result))

这已经和在函数式语言Haskell里面使用Monad几乎一模一样了。

我们来做点重命名:

  • readFileEXEC2 -> readFileAsync
  • bind -> then
  • exec -> done
readFileAsync('./file1')
.then(readFileAsync)
.done(result => console.log(result))

发现了吗?竟然是Promise!

Monad在哪里呢?

composeCPS开始,都是Monad.

  • readFIleCPS是Monad。事实上,它在Haskell里面被称作Cont Monad
  • exec 对象是一个Monad。事实上,它在Haskell里面被称作IO Monad

Monad 有什么性质呢?

  1. 它有一个环境;
  2. 这个环境里面不一定有值;
  3. 提供一个获取该值的方法;
  4. 有一个bind函数可以把值从第一个参数Monad中取出来,并调用第二个参数函数。第二个函数要返回一个Monad。并且该返回的Monad类型要和第一个参数相同。

数组也可以成为Monad

Array.prototype.flatMap = function(f) {
  const r = []
  for (var i = 0; i < this.length; i++) {
    f(this[i]).forEach(v => {
      r.push(v)
    })
  }
  return r
}

const arr = [1, 2, 3]
const addOneToThree = a => [a, a + 1, a + 2]

console.log(arr.map(addOneToThree))
// [ [ 1, 2, 3 ], [ 2, 3, 4 ], [ 3, 4, 5 ] ]

console.log(arr.flatMap(addOneToThree))
// [ 1, 2, 3, 2, 3, 4, 3, 4, 5 ]

我们可以验证:

  1. [] 是环境
  2. []可以为空,值不一定存在;
  3. 通过forEach可以获取;
  4. 我们定义了flatMap来作为bind函数。

结论

  • Monad是回调函数 ? 根据性质3,是的。

  • 回调函数式Monad? 不是,除非有定义bind函数。

欢迎加入我们Fundebug全栈BUG监控交流群: 622902485

版权声明: 转载时请注明作者Fundebug以及本文地址: https://blog.fundebug.com/2017/06/21/write-monad-in-js/#more

老生常谈,异步 + 循环

$
0
0
var fs = require('fs');
var files = ['./files/a', './files/b', './files/c'];

for (var i = 0; i < files.length; i++) {
    fs.readFile(files[i], 'utf-8', function(err, contents) {
        console.log(files[i] + ': ' + contents);
    });
}
// undefined: aaaaaaaa
// undefined: bbbbbbbb
// undefined: cccccccc


for (let i = 0; i < files.length; i++) {
    fs.readFile(files[i], 'utf-8', function(err, contents) {
        console.log(files[i] + ': ' + contents);
    });
}
// ./files/a: aaaaaaaa
// ./files/b: bbbbbbbb
// ./files/c: cccccccc


files.forEach(function(element, i) {
    fs.readFile(element, 'utf-8', function(err, contents) {
        console.log(files[i] + ': ' + contents);
    });
});
// ./files/a: aaaaaaaa
// ./files/b: bbbbbbbb
// ./files/c: cccccccc

爬虫程序的一点小问题,求帮助~~

$
0
0

var https = require(‘https’); var cheerio = require(‘cheerio’); var url = ‘https://movie.douban.com/chart’;

function filter(html) { var $ = cheerio.load(html); var lists = $(’.indent’).find(‘table’); var movies = []; lists.each(function (item) { var movie = $(this); var movieName = movie.find(‘a’).text(); var star = movie.find(’.rating_nums’).text(); var movieData = { movieName: movieName, star: star } console.log(movieData.movieName+movieData.star) }) }

https.get(url, function (res) { var html = ‘’; res.on(‘data’, function (data) { html += data; }) res.on(‘end’, function () { filter(html); }) })

输出结果为: 微信截图_20170621155700.png显示的结果缩进好奇怪啊,是怎么回事?

听说node 8.x不是支持async/await了,运行需要什么配置参数吗?

$
0
0

直接运行仍然报错,姿势错误?是需要加什么参数启动吗?

爬虫数据可以写入txt文件,但不能写入excel中?

$
0
0

这样写是可以的: function printItemInfo(itemInfo) { var ws = fs.createWriteStream(‘stradewVallry.txt’,‘utf-8’); itemInfo.forEach(function (item) { var name = item.name; var source = item.source; var recipe = item.recipe; ws.write(’【’ + name + ‘】’ + ‘【’ + source + ‘】’ + ‘【’ + recipe + ‘】’ + ‘\r\n’); console.log(’【’ + name + ‘】’ + ‘【’ + source + ‘】’ + ‘【’ + recipe + ‘】’ + ‘\n’); }); ws.end(); } 但如果想导入excel中,直接改成: var ws = fs.createWriteStream(‘stradewVallry.xslx’,‘utf-8’); 好像就不行了。 想导入excel中应该怎么做??


【杭州 / 北京】蚂蚁金服招聘资深前端开发工程师

$
0
0

简介: 我们是蚂蚁金服财富事业群,负责的主要产品是蚂蚁聚宝,现在叫蚂蚁财富。有支付宝内的业务,也有独立的 app。

P6及以上职位基本要求就三点:

  1. 一年以上前端工作经验
  2. 熟悉移动端 H5 开发
  3. 有过 Node.js 开发

待遇什么的我不知道哈

招聘部门:蚂蚁金服-财富事业群-财富无线事业部 招聘地点:杭州、北京

有兴趣的同学请给我简历: daniel.ld@antfin.com

formidable 如何禁止某些格式文件上传?

$
0
0

如题 在学习这个库的时候如果我提前指定了 上传路径如 form.uploadDir = ‘/public/data’; 虽然我后面check了上传文件的格式并且在页面提示了错误,但是文件还是会上传上去,我该如何做?

后端程序放在腾讯云服务器中后无法在后端中发起https请求

$
0
0

链接1:http://181.235.252.128:3000/userInfo/testRequestHttps

链接2:https://tcircling.com/userInfo/testRequestHttps

181.235.252.128是我的服务器地址,tcircling.com是服务器的域名

目的:最终是要用链接2链接到后端发起https请求获取数据

问题描述: 因工作需求,我需要在我的后端中发起https请求微信端的api获取数据,链接1和链接2都是路由到以下testRequestHttps函数。奇怪的是用链接1请求数据能请求成功,而用链接2请求却请求失败,请问这是什么原因呢?我的后端是放在腾讯云服务器中的,请问是缺少什么没有配置吗?

testRequestHttps:function(req,res,next){ var url = “https://www.baidu.com”; request(url, function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body); res.json(body); } }); }

这么多年过去了!

$
0
0

社区的搜索一直搜索不到东西。。。。。

在学习jquery Ajax时遇到了一个问题

$
0
0

JQuery 权威指南 第二版 第六章在讲Ajax时先讲了 &传统的JavaScript方法实现Ajax功能& 的例子,然后我运行实例,发现并不能得到他说的结果,书中原代码: <head> <title>传统的JavaScript方法实现Ajax功能</title> <style type=“text/css”> body{font-size:13px} .divFrame{width:260px;border:solid 1px #666} .divFrame .divTitle{padding:5px;background-color:#eee} .divFrame .divContent{padding:8px} .divFrame .divContent .clsShow{font-size:14px} .btn {border:#666 1px solid;padding:2px;width:80px; filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff, EndColorStr=#ECE9D8);} </style> <script type=“text/javascript”> var objXmlHttp = null; //声明一个空的XMLHTTP变量 function CreateXMLHTTP() { //根据浏览器的不同,返回该变量的实体对象 if (window.ActiveXObject) { objXmlHttp = new ActiveXObject(“Microsoft.XMLHTTP”); } else { if (window.XMLHttpRequest) { objXmlHttp = new XMLHttpRequest(); } else { alert(“初始化XMLHTTP错误!”); console.log(‘sss’); } } } function GetSendData() { document.getElementById(“divTip”).innerHTML = “<img alt=’’ title=‘正在加载中…’ src=‘Images/Loading.gif’ />”; //初始化内容 var strSendUrl = “b.html?date=”+Date(); //设置发送地址变量并赋初始值 CreateXMLHTTP(); //实例化XMLHttpRequest对象 objXmlHttp.open(“GET”, strSendUrl, true); //open方法初始化XMLHttpRequest objXmlHttp.onreadystatechange = function() { //回调事件函数 if (objXmlHttp.readyState == 4) { //如果请求完成加载 if (objXmlHttp.status == 200) { //如果响应已成功 //显示获取的数据 document.getElementById(“divTip”).innerHTML = objXmlHttp.responseText; } } } objXmlHttp.send(null); //send发送设置的请求 } </script> </head> <body> <div class=“divFrame”> <div class=“divTitle”> <input id=“Button1” type=“button” onclick="GetSendData()" class=“btn” value=“获取数据” /> </div> <div class=“divContent”> <div id=“divTip”></div> </div> </div> </body>

b.html 是在同级目录下, 我用的浏览器是 chrome, 然后控制台没有任何错误提示,不过我在 if (objXmlHttp.readyState == 4) 打断点查看 发现objXmlHttp.readyState 是2,objXmlHttp.status是 0,虽然不影响下面的jquery方法的学习,但还是想了解下传统方法这样写哪里有问题?

cnode代码格式化建议

$
0
0

看到很多同学在论坛上发代码都没格式化,直接复制粘贴代码格式惨不忍睹。其实很简单,用markdown语法就好了:

```js function foo() { // code there… } ```

效果:

function foo() {
	// code there...
}

记得格式化一下代码,节约别人的时间,也是节约自己的时间。

在阿里云上部署企业级NodeJS应用的方法或教程?

$
0
0

各位好,我们是一家全栈JS的小公司,目前后端都是Node。之前一直用的是LeanCloud的云引擎服务,使用起来很简单,只需要在他们的后台点“部署”,LeanCloud就会自动拉取我们github上的代码,完成部署。

不过,我们现在准备弃用LeanCloud了,因为感觉这家公司很不地道,未来估计会越来越坑。(现在逼着我们必须花900块钱才能做一个域名转入的操作,不转就可能被下线,明明是他们应该免费提供的功能,就是卡着你不让你弄,所以觉得很不靠谱)

我们准备自己买ECS搭环境,但是总感觉心里没谱,有很多点不知道该怎么做,比如什么负载均衡、自动重启、自动部署、可以回滚之类的。一时间不知道如何下手。在网上找资料也没有找到能满足“企业级”要求的教程,都是开发者自己玩玩的搭建过程。

请问,哪里可以找到这样的资料?多谢

PS:听说Docker很不错,我们也有学习的意愿,但是也找不到非常合适的教程。我们需要的是企业级的,不是入门学习那种的。


Express中间件向下传递数据的问题

$
0
0

想利用中间件机制来降低回调嵌套的数量,就想到用中间件

将数据绑定在向下传递的参数req,res中,其他路由是获取不到的,是否可以放心使用?

	 app.use('/login',check_one,check_two)
  
	  check_one(req,res,next){
		  model.findOne()
			  .then((data)=>{
				  // 将其绑定在向下传递的参数中req,res均可,其他路由是获取不到的,是否可以放心使用?
				  req.mydata=data
			  });
	  }
	  check_two(req,res){
	  	console.log(req.mydata)
	  }

不知道这样的写法是否正确?

koa-router怎么动态加载数据库路由

$
0
0

我想用koa-router加载数据库中查询出来的路由,发现中间件是同步的。 index.js

const routers = require('./middlewares/router')

// 加载路由中间件
app.use(routers());

router.js

module.exports = function (dir) {
    let
        controllers_dir = dir || 'routers',
        router = require('koa-router')();
    addRouters(router, controllers_dir);		// 这是加载写好的路由
    // 动态添加数据库菜单路由
    // var menus = await menu.getMenus();
    // for(let i=0;i<menus.length;i++){
    //     if(menus[i].model == 'categories'){
    //         router.get(menus[i].url, category);
    //     }
    // }
    return router.routes();
};

看注释部分,我知道这里不能用await,但是我写成回调的话(下面这样),不会进异步,请问该怎么解决

menu.getMenus().then(function(menus){
	     for(let i=0;i<menus.length;i++){
		     if(menus[i].model == 'categories'){
		        router.get(menus[i].url, category);
		     }
		 }
    return router.routes();
})

ERR_CONTENT_LENGTH_MISMATCH 上传图片到服务器出错.

$
0
0

本地启服务测试,没问题. 将代码更新到服务器(centOS6.8)之后. 测试图片上传.报这个错: ERR_CONTENT_LENGTH_MISMATCH 处理请求的代码: try{ var imgData = req.body.headPortrait; var userId = req.body.userId;

    var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
    var dataBuffer = new Buffer(base64Data, 'base64');

    //将buffer写成文件,文件名如果重名的话.则会覆盖
    fs.writeFile('./public/uploads/headPortrait'+userId+'.jpg',dataBuffer,function(err){
        console.log(err);
    });
    var user = userService.updateUser({'headPortrait':'/uploads/headPortrait'+userId+'.jpg'},userId);
    console.log(user.get({'plain': true}));

    return res.json("上传成功!");
}catch(e){
    return res.json("错误信息:"+e.description );
}

代码意思是.将传过来的的图片转成buffer然后存入指定的目录 再调用自己定义的userService.updateUser()方法,存入数据库. 我在网上查询了下这个错误.说可能是 用户/目录权限的问题. 但是没有找到解决方案. 前不久才开始玩centOS的.这方面不是很懂. 麻烦各位大大,看下可能的解决问题的方法.

vue2.x全家桶+nodeJs+mongodb实现学校老师考勤应用

$
0
0

record

使用vue全家桶(vue2.x + vue-router + vue-resource + vuex) + nodeJs + mongodb开发的学校老师上课考勤应用

项目地址

github地址

说在前面

初学vue配合后台语言开发的时候,完全不知从何下手,网上的Demo更是少之又少。经过一段时间的学习积累,总算掳清vue单页面与服务器的关系,碰巧实训课程也有vue配合后台开发的要求,于是就动手做这个项目。

运行项目

# 先在你的电脑安装mongodb数据库,然后启动数据库
mongod --dbpath=f:\mongodb\db

# 进入到项目文件,安装依赖包
npm install

# 运行nodeJs服务器
npm start

# 运行项目
npm run dev

使用技术

vue2.x+ vue-router+ vuex+ vue-resource+ vue-cli+ scss+ node.js+ express+ mongodb+ async+ es6

部分截图

登录注册

导入csv文件,登记缺勤学生,查看缺勤学生

项目布局

.
├── api                                         // 服务器逻辑处理
├── build                                       // webpack配置文件
├── config                                      // 项目打包路径
├── src                                         // 源码目录
│   ├── components                              // 组件
│   │   ├── common                              // 公共组件
│   │   ├── calendar.vue                        // 日历组件
│   │   ├── check_work.vue                      // 查看缺勤组件
│   │   ├── cls_call.vue                        // 登记缺勤组件
│   │   ├── import_roster.vue                   // 导入组件
│   │   ├── login.vue                           // 租金组件
│   │   ├── register.vue                        // 注册组件
│   │   ├── restor.vue                          // 列表组件
│   │   ├── select_cls.vue                      // 选择班级组件
│   │   ├── select_restor.vue                   // 查看班级组件
│   ├── router
│   │   └── index.js                            // 路由配置
│   ├── store                                   // vuex的状态管理
│   │   ├── index.js                            // 引用vuex,创建store
│   │   ├── modules                             // store模块
│   │   └── mutations.js                        // 配置mutations
│   └── style
│       ├── common.scss                         // 公共样式文件
│       ├── mixin.scss                          // 样式配置文件
│       └── swiper.min.css
│   └── App.vue                                 // 页面入口文件
├── static                                      // 静态资源
│   ├── css                                     // css文件
│   ├── file                                    // 上传的csv文件
│   ├── fonts                                   // 字体图标
├── index.html                                  // 入口html文件
.

在学习jquery Ajax时遇到的又一个问题

$
0
0

用 get方法去请求aspx文件中的数据,得不到想要的结果: script 部分: <script type=“text/javascript”> $(function() { $("#Button1").click(function() { //按钮单击事件 //打开文件,并通过回调函数返回服务器响应后的数据 $.get(“UserInfo.aspx”, { name: encodeURI($("#txtName").val()) }, function(data) { $("#divTip") .empty() //先清空标记中的内容 .html(data); //显示服务器返回的数据 }) }) }) </script>

aspx文件:
<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>

<% string strName = System.Web.HttpUtility.UrlDecode(Request[“name”]);//解码姓名字符 string strHTML = “<div class=‘clsShow’>”; //初始化保存内容变量 if (strName == “陶国荣”) { strHTML += “姓名:陶国荣<br>”; strHTML += “性别:男<br>”; strHTML += “邮箱:tao_guo_rong@163.com<hr>”; } else if (strName == “李建洲”) { strHTML += “姓名:李建洲<br>”; strHTML += “性别:女<br>”; strHTML += “邮箱:xiaoli@163.com<hr>”; } strHTML += “</div>”; Response.Write(strHTML); %> 想读其中的一条数据,结果通篇返回,谁能帮解答下错误在哪?

Viewing all 14821 articles
Browse latest View live