Ionic3-Angular4-Sqlite中POST数组至WebService时数据为空问题
嘿,我来帮你搞定这个POST请求的问题!你遇到的object undefined报错和后端接收数据为NULL的情况,结合你的Ionic3+Angular4+Sqlite技术栈,大概率是参数构造、请求头配置或者数据传递方式出了问题,我整理了几个关键的排查和修复步骤:
一、先修复最基础的语法错误
你提到的let params{}写法肯定会触发object undefined错误——这是语法问题!正确的对象声明应该是let params = {},这是最优先要改的点。
二、必须配置正确的请求头
Angular4发送JSON格式的POST请求时,一定要设置Content-Type: application/json请求头。如果没加这个,后端根本没法正确解析你发送的数据,自然就会接收到NULL。
三、完整的请求示例代码
假设你已经从Sqlite中查询到了contactos数组,下面是包含从数据库取数、构造请求、发送POST的完整流程代码,你可以参考调整:
首先,确保你在组件中正确注入Http和SQLite模块:
import { Http, Headers, RequestOptions } from '@angular/http'; import { SQLite, SQLiteObject } from '@ionic-native/sqlite'; constructor(private http: Http, private sqlite: SQLite) {}
然后编写发送数据的方法:
sendContactosToServer() { // 1. 从Sqlite读取contactos数据 this.sqlite.create({ name: 'data.db', location: 'default' }).then((db: SQLiteObject) => { db.executeSql('SELECT * FROM contactos', []) .then(res => { let contactos = []; // 把查询结果转成数组 for(let i=0; i<res.rows.length; i++){ contactos.push({ id: res.rows.item(i).id, nombre: res.rows.item(i).nombre, // 这里补充你的表中其他字段 }); } // 2. 构造请求参数和请求头 let headers = new Headers({ 'Content-Type': 'application/json' }); let requestOptions = new RequestOptions({ headers: headers }); let params = { contactos: contactos }; // 正确声明参数对象 // 3. 发送POST请求 this.http.post('你的WebService接口地址', JSON.stringify(params), requestOptions) .subscribe( successRes => { console.log('数据发送成功!返回结果:', successRes.json()); }, errorRes => { console.error('请求失败:', errorRes); } ); }) .catch(sqlError => console.log('Sqlite查询出错:', sqlError)); }).catch(sqlCreateError => console.log('Sqlite初始化出错:', sqlCreateError)); }
四、后端接收的注意事项
别忘了确认你的WebService后端是按JSON格式接收数据的!比如如果是PHP后端,不能直接用$_POST(它只接收表单编码的数据),得用file_get_contents('php://input')来读取JSON数据:
// PHP后端示例代码 $rawInput = file_get_contents('php://input'); $requestData = json_decode($rawInput, true); $contactos = $requestData['contactos']; // 这样就能拿到你发送的数组了
五、额外排查点
- 发送前先打印
contactos数组:console.log(contactos),确认它不是空数组或者undefined - 检查WebService接口地址是否正确,有没有跨域问题(本地测试的话,Ionic可以配置代理,或者后端开启CORS)
- 如果你的项目用了Angular4的
HttpClient(部分项目可能提前引入),那不需要手动JSON.stringify,直接传递params对象就行,HttpClient会自动帮你序列化
内容的提问来源于stack exchange,提问作者Sergio Camargo
相关产品推荐
相关产品推荐

