使用jquery发送post-data会产生406错误

时间:2014-09-09 22:24:36

标签: javascript php jquery

我有一个带有tinymce-textfield的表单,其内容我使用jQuery的$ .post命令发送到php脚本。

这在大多数情况下都可以正常工作,除非我在该文本字段中有一个表单(它是PayPal-Donate表单),如下所示:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank"><input name="cmd" type="hidden" value="_s-xclick" /> <input name="hosted_button_id" type="hidden" value="xxxxxx" /> <input alt="PayPal - The safer, easier way to pay online!" name="submit" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" type="image" /> <img src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" alt="" width="1" height="1" border="0" /></form>
<p><strong>Make a monthly donation</strong></p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank"><input name="cmd" type="hidden" value="_s-xclick" /> <input name="hosted_button_id" type="hidden" value="xxxx" />
<table>
<tbody>
<tr>
<td><input name="on0" type="hidden" value="Make a monthly donation" /></td>
</tr>
<tr>
<td><select name="os0">
<option value="$10 Month">$10 Month : $10.00 USD - monthly</option>
<option value="$25 Month">$25 Month : $25.00 USD - monthly</option>
<option value="$35 Month">$35 Month : $35.00 USD - monthly</option>
<option value="$50 Month">$50 Month : $50.00 USD - monthly</option>
<option value="$100 Month">$100 Month : $100.00 USD - monthly</option>
<option value="$125 Month">$125 Month : $125.00 USD - monthly</option>
<option value="$140 Month">$140 Month : $140.00 USD - monthly</option>
<option value="$200 Month">$200 Month : $200.00 USD - monthly</option>
<option value="$250 Month">$250 Month : $250.00 USD - monthly</option>
<option value="$300 Month">$300 Month : $300.00 USD - monthly</option>
</select></td>
</tr>

<tr>
<td><input maxlength="200" name="os1" type="text" /></td>
</tr>
</tbody>
</table>
<input name="currency_code" type="hidden" value="USD" /> <input alt="PayPal - The safer, easier way to pay online!" name="submit" src="https://www.paypalobjects.com/en_US/i/btn/btn_subscribeCC_LG.gif" type="image" /> <img src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" alt="" width="1" height="1" border="0" /></form>

奇怪的是,它可以在我的本地网络服务器上运行。但是当我把它放在实时服务器上时,会产生406错误......

有什么想法吗?

[编辑]

这是javascript:

var serial = $('#frmPageEdit').serialize();

serial = serial + "&fid_navigation=" + id + "&action=save_page";

$.post('pages.html', serial, function(data){

            var result = _pagesSplitResponse(data);
            // Do some stuff with the response here...

            window.alert(_pagesTranslations['seite_gespeichert']);
}

再次 - 它适用于所有其他内容,它只是导致错误的上述形式......

1 个答案:

答案 0 :(得分:0)

事实证明,服务器上的某些XSS机制导致了错误。不确切知道表单的哪个部分导致错误,但我怀疑它是输入字段。

对于遇到同样问题的人来说,这就是解决方案:

对于在提交之前导致问题的表单变量使用某种base_64编码(如下所示:jQuery为https://github.com/carlo/jquery-base64),然后在接收PHP脚本中对其进行base_64解码。

造成这种麻烦的一件事是我使用tinyMCE作为编辑器,它在base_64编码的字符串周围添加了

...

。因此,首先解码失败。因此,在解码之前,请确保从编码字符串中删除每个HTML元素。

希望它可以帮助任何人