JS POSTajax请求返回数据据显示不正确

$.post异步引起的接收不到返回数据包
背景:公司微信公众号项目,前端调用php接口,使用的是$.post,抓包显示php接口返回数据正常,而js获取不到返回数据包。
$.post(window.config.root+&/wx/pgash/page/share&, {url:location.href.split('#')[0]}, function (res) {})
看上去貌似没什么问题,但实际上不能接收到callback。
就想到了$.post发得请求为&异步&请求,所以发出请求后还没等一般处理程序处理返回结果,就执行了为res变量赋值,因此取到的值总为undefined。
经过查询,可以发现Jquery封装好的$.post $.get发得请求都为&异步&请求(最好查看一下Jquery的),当然上面的用于获取回调函数返回值的写法是错误的,只需将发送方式改为同步即可,即如下代码:
type:&POST&,
async:false,
url:window.config.root+&/wx/pgash/page/bind_phone&,
data:{&phone&: phoneValue,&captcha&:securityValue,&open_id&:window.config.open_id},
dataType:&json&,
success:function (res) {}
另外还有时候有可能是dataType的问题,返回的数据类型不是json。Node.js框架
Express 学习到3. Post请求 - body(1)时 根据课程操作发现后台获取不了数据,req.body 是undefined 百思不得其解
32个月前 提问
&!DOCTYPE html&&html&&head lang="en"&
&meta charset="UTF-8"&
&script src="http://code.jquery.com/jquery-2.1.1.min.js"&&/script&
&title&&/title&
function login(){
var username = $('#username').val();
var password = $('#password').val();
var data = { "username": username, "password":password};
url:'login',
type:'POST',
dataType:"json",
data:data,
success:function(data,status){
if(status == 'success'){//
location.href='index';
error:function(data,status,e){
if(status == "error"){
location.href='login';
console.log("w"+data)
&/script&&/head&&body&&div style="height:<span style="color:#px;width:<span style="color:#px;margin:<span style="color:#px auto;margin-left:auto;border:solid 1px;background: rgb(<span style="color:#, <span style="color:#, <span style="color:#);"&
&div style="width:<span style="color:#px;margin:auto;margin-top:50px;"&
# 用户登录
&form action="#" role="form" method="post"&
&input id="username" type="text" name="username" style="margin: 20px 0px;"&
&input id="password" type="password" name="password"&
&div style="margin-top:30px;margin-left:<span style="color:#px;"&
&input type="button" onclick="login();" value="登 陆"&
&/div&&/div&&/body&&/html&var express = require('express');var app = express();var bodyParser = require('body-parser');var multer = require('multer');app.get('/', function (req, res) {
res.render('register');});app.get('/index', function(req, res) {
res.render('index');});app.get('/login',function(req,res){
res.render('login');});app.post('/login',function(req,res){
var user={
username:'admin',
password:'admin'
console.log(req.body)
console.log(req.body.username)
res.sendStatus(<span style="color:#)
/*if(req.body.username==user.username&&req.body.password==user.password)
res.send(200);
res.send( 404 );
}*/});// 修改模板文件的后缀名为htmlapp.set( 'view engine', 'html' );// 运行ejs模块app.engine( '.html', require( 'ejs' ).__express );app.use(express.static(require('path').join(__dirname, 'public')));app.use(bodyParser.json());app.use(bodyParser.urlencoded({ extended: true }));app.use(multer());var server = app.listen(<span style="color:#, function () {
var host = server.address().
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);});
32个月前 回答
app.set( 'view engine', 'html' );// 运行ejs模块app.engine( '.html', require( 'ejs' ).__express );app.use(express.static(require('path').join(__dirname, 'public')));app.use(bodyParser.json());app.use(bodyParser.urlencoded({ extended: true }));app.use(multer());
模块加载顺序问题
放到app.get。。。这些之前就可以了
汇智网是一个学习最前沿编程技术的平台,互动式的学习和实时在线的练习,能让你迅速进入状态,快速掌握知识技能。
微信订阅号后端接收不到AngularJs中$http.post发送的数据,总是显示为null
示例代码:
$http.post(/admin/KeyValue/GetListByPage,
pageindex: 1,
pagesize: 8
  .success(function(){
  alert("Mr靖");
代码没有错,但是在后台却接收不到数据,这是为什么呢?
用火狐监控:参数是JSON格式
用谷歌监控:传参方式是request&payload
  可以发现传参方式是request&payload,参数格式是json,而并非用的是form传参,所以在后台用接收form数据的方式接收参数就接收不到了
  POST表单请求提交时,使用的Content-Type是application/x-www-form-urlencoded,而使用原生AJAX的POST请求如果不指
定请求头RequestHeader,默认使用的Content-Type是text/charset=UTF-8,而此处的Content-Type是:
2.解决方法:
&直接上代码:
//要通过post传递的参数
var data = {
pageindex: 1,
pagesize: 8,
//post请求的地址
url = "/admin/KeyValue/GetListByPage",
//将参数传递的方式改成form
postCfg = {
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
transformRequest: function (data) {
return $.param(data);
//发送post请求,获取数据
$http.post(url, data, postCfg)
.success(function (response) {
alert("Mr靖");
接下来再看监视工具:
火狐监视:参数类型已经变成表单数据
谷歌监视:
现在传参方式就变成form方式了,然后后端就可以正常接收参数了!
阅读(...) 评论()解决方案:
配置$httpProvider:
var myApp = angular.module('app',[]);
myApp.config(function($httpProvider){
$httpProvider.defaults.transformRequest = function(obj){
var str = [];
for(var p in obj){
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
$httpProvider.defaults.headers.post = {
'Content-Type': 'application/x-www-form-urlencoded'
或者在post中配置:
method:'post',
url:'post.php',
data:{name:"aaa",id:<span style="color: #,age:<span style="color: #},
headers:{'Content-Type': 'application/x-www-form-urlencoded'},
transformRequest: function(obj) {
var str = [];
for(var p in obj){
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
}).success(function(req){
console.log(req);
阅读(...) 评论()

我要回帖

更多关于 ajax请求返回数据类型 的文章

 

随机推荐