我是网络开发的新手,并试图让我的第一个应用程序使用Angular 2.我有一个被动的表单,我正在构建一个样本发票,其中包含标题和项目信息。当我尝试将数据发布到同一网络中另一台机器上托管的数据库中时,我在Observable运算符Map上发现了一些错误"[Exception: TypeError: 'caller' and 'arguments' are restricted function properties and cannot be accessed in this context. at Function.remoteFunction (<anonymous>:2:14)]/
以下是代码: 为简单起见,我创建了一个变量sampleInvoice,其中包含服务器可接受的预格式化JSON结构。 我已尝试使用REST扩展程序为Chrome发布此数据,它工作正常。
invoice.service.ts
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { of } from 'rxjs/observable/of';
import 'rxjs/add/operator/delay';
import { Http, Headers, RequestOptions,Response, RequestMethod} from '@angular/http';
import { Invoice, invoices } from './invoice';
createInvoice(invoice: Invoice): Observable <Invoice>{
let sampleInvoice = {
"invoiceDate":"2017-03-21",
"mobileNumber": 8297088993,
"salesPerson": "Ramesh",
"paymentMode": "CASH",
"numOfItems": 1,
"grossAmount": "2100.00",
"totalDiscount": "200.00",
"totalTax":"100.00",
"netAmount": "2000.00",
"paidAmount": "2000.00",
"items": [
{
"lineItem": 1,
"productBarcode": "product1",
"quantity": 1,
"itemGrossAmount":"1200.00",
"itemDiscount": "50.00",
"itemTax":"50.00",
"itemNetAmount":"1200.00"
},
{
"lineItem": 2,
"productBarcode": "product2",
"quantity": 2,
"itemGrossAmount":"400.00",
"itemDiscount": "50.00",
"itemTax":"50.00",
"itemNetAmount":"800.00"
}
]
}
let headers = new Headers({"Content-Type": "application/json"});
console.log(headers);
console.log(JSON.stringify(sampleInvoice));
return this.http.post("http://192.168.0.9:8000/api/invoice/create/",JSON.stringify(sampleInvoice),{headers})
.map(res => res.json());
}
注意:服务器(django和mySQL)托管在上述URL的另一台计算机上。 我们非常感谢您解决此问题的任何帮助。
此致 纳文
答案 0 :(得分:1)
问题结果与我写Observable的方式有关。我错过的是我没有订阅响应,而是使用catch操作符响应。由于没有订阅,Observable被标记为Cold并且没有提出任何网络请求。这是createInvoice的更新代码片段
return this.http.post(this.invoiceUrl+"create/",bodyString,options)
.map((res:Response) => res.json())
.subscribe((res)=>{
if (res){
console.log(res);
return res
}});