【发布时间】:2013-12-12 00:24:24
【问题描述】:
我正在制作一个卡片生成器以获取乐趣并学习如何从输入中收集数据并写入数据库。
当尝试发送这个简单的 JSON 数据时,我的 PHP 脚本出现 POST Forbidden (403) 错误。
这是我正在使用的 jsonlint.com 验证对象,它是从输入元素和 javascript 生成的-
{
"name": "Transfer Power",
"layout": "cic",
"artwork": "http://static.tvtropes.org/pmwiki/pub/images/Voyager_shield.jpg",
"rarity": "common",
"cost": "3",
"text": "Until the start of your next turn, target friendly Ship gains Shield +X and Damage -X where X is the Ship's current Damage."
}
据我了解I should be able to send the complete artwork url 没有任何格式,但 POST 仅在我删除 url 的方案时才有效。我希望这很简单。这是代码-
var name = $('#name').val();
var layout = type;
var artwork = $('#artwork').val();
var rarity = $('#rarity').val();
var cost = $('#cost').val();
var type = $('#type').val();
var text = $('#text').val();
var card = {};
card.name = name;
card.layout = layout;
card.artwork = artwork;
card.rarity = rarity;
card.cost = cost;
card.text = text;
$.post('writecard.php', card, function(data){
console.log(data);
});
还有超级简单的 PHP echo 来重新验证我的数据-
<?php
$raw = $_POST;
foreach($raw as $key => $val){
echo $key . ': ' . $val . ' -- ';
}
?>
再次:当我删除 URL 的方案时,它成功发送 POST 并返回数据。
另一个问题:如何确保我发送的是整数而不是字符? "cost": "3", 是否应该不显示为 "cost": 3, ?
感谢阅读。 :]
【问题讨论】:
-
您将对象传递给 jquery,而不是 json。 jquery 将对象转换为参数字符串,这可能不是您想要的。此外,如果您确实将其字符串化为 json,您仍然无法从 $_POST 访问它,因为它将在请求正文中发送。
-
检查没有服务器安全系统,例如suhosin,干扰。检查服务器的日志,看看是否有更多关于你为什么得到 403 的详细信息。
-
@KevinB 在我的 PHP 中 stringify() 之后,我会使用 file_get_contents 吗?在发送字符串化 POST 之后,在 PHP 中拥有可用的 json 数据(更喜欢数组)的最简单方法是什么。如果有意义的话?
-
@KevinB 我现在明白你实际上说了什么。我还没有制作 JSON。我制作了一个对象,即使在字符串化之后它也只是一个字符串。我想我需要确定我正在使用什么类型的数据,然后再看看。
标签: javascript php jquery json post