我正在尝试在ajax请求中传递JSON字符串。这是我的代码。
NewOrder = JSON.stringify (NewOrder);
alert (NewOrder);
var req = {
url: '/cgi-bin/PlaceOrder.pl',
method: 'POST',
headers: { 'Content-Type': 'application/json'},
data: "mydata="+ NewOrder
};
$http(req)
.success(function (data, status, headers, config) {
alert ('success');
})
.error(function (data, status, headers, config) {
alert (status);
alert (data);
alert ('Error')
});
alert(NewOrder)给出 -
{"ItemList":[{"ItemName":"Quality Plus Pure Besan 500 GM","Quantity":1,"MRP":"28.00","SellPrice":"25.00"}],"CustomerID":1,"DeliverySlot":2,"PaymentMode":1}
这似乎是一个有效的JSON字符串。
但是在脚本方面我遇到了以下错误。在这一行
my $decdata = decode_json($cgi->param('mydata'));
格式错误的JSON字符串,无论是数组,对象,数字,字符串还是原子,都在字符偏移0处(在“(字符串结尾)之前”)
有人可以帮助我,为什么我会收到此错误?
答案 0 :(得分:3)
$cgi->param('myData')
返回查询参数字符串' mydata',在您的情况下不会发送。
您在http post有效负载的请求正文中发布了json数据,而不是查询/表单参数。在这种情况下,您需要一些其他功能来读取服务器端脚本中请求正文的内容。
碰巧是:
my $data = $query->param('POSTDATA');
如下所述:http://search.cpan.org/~lds/CGI.pm-3.43/CGI.pm#HANDLING_NON-URLENCODED_ARGUMENTS
你也应该删除" mydata ="来自您发布的正文中的json,因为http请求有效负载主体没有参数名称(它们仅用于查询/表单参数)。
您的结束代码应该是这样的:
var req = {
url: '/cgi-bin/PlaceOrder.pl',
method: 'POST',
headers: { 'Content-Type': 'application/json'},
data: NewOrder
};
和服务器端:
my $decdata = decode_json($query->param('POSTDATA'));
答案 1 :(得分:0)
我认为这可能与此问题有关:AngularJs $http.post() does not send data
通常我会发布这样的数据:
var req = {
url: '/cgi-bin/PlaceOrder.pl',
method: 'POST',
headers: { 'Content-Type': 'application/json'},
data: {"mydata" : NewOrder}
};
但是我假设你期望数据作为请求参数:
my $decdata = decode_json($cgi->param('mydata'));
如果是这种情况,那么链接的SO问题就是你要找的。 p>
答案 2 :(得分:0)
Angular $ http.post接受两个参数作为url和有效负载
var url = '/cgi-bin/PlaceOrder.pl';
var payLoad = {'myData' :JSON.stringify(NewOrder)};
$http.post(url, payLoad)
.success(function(data) {
console.log(success);
})
在服务器端,从请求参数中获取所需的json字符串,然后按如下方式对json进行反序列化:
$result = $cgi->param('myData');
my $decdata = decode_json($result);