【问题标题】:jQuery/PHP- POST Forbidden (403) when trying to send a complete URL in my JSON datajQuery/PHP- POST Forbidden (403) 尝试在我的 JSON 数据中发送完整的 URL
【发布时间】: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


【解决方案1】:

根据您的示例使用 writecard.php 时,以下 index.html:

<html>
    <script src="jquery-1.10.2.min.js" ></script>
    <body>
        <input id="name" value="Transfer Power" />
        <br/>
        <input id="layout" value="cic" />
        <br/>
        <input id="artwork" value="http://static.tvtropes.org/pmwiki/pub/images/Voyager_shield.jpg" />
        <br/>
        <input id="rarity" value="common" />
        <br/>
        <input id="cost" value="3" />
        <br/>
        <input id="type" value="unknown" />
        <br/>
        <input id="text" value="Until the start of your next turn, target friendly Ship gains Shield +X and Damage -X where X is the Ship's current Damage." />
    </body>

    <script>
        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);
        });
    </script>
</html>

输出:

name: Transfer Power -- 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. --

并且将 javascript 排除在等式之外 - 如果它是一个简单的形式呢?

<html>
  <body>
      <form action="writecard.php">
        <input id="name" name="name" value="Transfer Power" />
        <br/>
        <input id="layout" name="layout"  value="cic" />
        <br/>
        <input id="artwork" name="artwork"  value="http://static.tvtropes.org/pmwiki/pub/images/Voyager_shield.jpg" />
        <br/>
        <input id="rarity" name="rarity"  value="common" />
        <br/>
        <input id="cost" name="cost"  value="3" />
        <br/>
        <input id="type" name="type"  value="unknown" />
        <br/>
        <input id="text" value="Until the start of your next turn, target friendly Ship gains Shield +X and Damage -X where X is the Ship's current Damage." />
        <br/>
        <input type="submit" />
      </form>
  </body>
</html>

【讨论】:

  • 在使用您的确切代码时,我收到了 POST Forbidden (403)。如果我从card.artwork 中删除http://,那么它工作正常。我不知道为什么?
  • 一模一样?包括jquery的版本?将上述文本复制并粘贴到文件 index.html 中并加载它?只是为了健全性检查...
  • 与粘贴的完全相同。是的,仍然是 403。&lt;script src="//code.jquery.com/jquery-1.10.2.min.js" &gt;&lt;/script&gt; 我认为工作正常。
  • Forbidden 您无权访问此服务器上的 writecard.php。此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。
  • 再一次,如果我从艺术品的 url (http://) 中删除该方案,则完全可以正常工作。
猜你喜欢
  • 2013-08-21
  • 2011-03-15
  • 2019-11-18
  • 2015-10-26
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
相关资源
最近更新 更多