我正在做一个简单的jQuery帖子:
$.post( "script.php", { urls: listOfURLs} );
如果post
不包含任何网址,则POST script.php 403 (Forbidden)
可以正常工作,但是,如果包含网址,那么我会得到:
{{1}}
是否有某种方法可以清理此URL列表或其他内容以阻止它进行403ing?
涉及的所有内容都在同一个域中。
答案 0 :(得分:3)
它完全取决于你的listOfURLs
是什么,你必须记住,post请求的数据部分应该始终是一个字符串,所以解决方案可能是:
如果ListOfURLs是一个数组,你应该这样做:
$ .post(“script.php”,{'urls []':[“URL1”,“URL2”]});
如果是表单数据,您可以将其序列化为json
字符串。
如果不是,请尝试将其json
改为。
并且如果这不起作用,请向我们提供有关数据本身的一些其他详细信息
答案 1 :(得分:3)
据我所知:这个“bug”在服务器端。
作为第二个参数传递给$.post()
方法的对象只是序列化为您请求中的数据。
您可以通过检查浏览器的Web控制台(例如:Firebug的“网络”标签,Firefox内置控制台的“网络”标签或Chrome或IE中的类似标签,查看发送到服务器的内容) )。我的猜测是您的请求与您提供的数据一起正确发送。
您的服务器对此数据的处理方式是另一回事;您需要调试服务器配置和服务器端代码,以确定您的请求最终如何触发403
。
403
的一个可能原因是文件权限错误。检查您的文件权限是否允许Web服务器访问它们。
例如,如果您使用的是标准的apache / linux配置,请检查是否:
www-data
对所有代码目录拥有x
权限www-data
对所有代码文件拥有r
权限www-data
对应下载或上传的文件拥有正确的权利答案 2 :(得分:1)
403告诉您系统尝试使用您尝试发送的对象访问URL或资源。
我不喜欢这个ajax调用的简短形式。如果您希望在代码中获得更多概述,请使用long syntax of JQuery。 See this for more information.
$.ajax({
type: "POST",
url: url,
data: listofURLs2JSON,
dataType: "json",
statusCode: {
404: function() {
alert( "List of urls. Nooooo" );
}
},
success: function(data) {
alert( "This was totally awesome!" );
},
});
正如Labib所指出的,您可以使用JSON来避免使用403。要反序列化对象,请使用JSON.stringify:
var listofURLs2JSON = JSON.stringify(array/object, callback);
然后你可以将对象作为字符串接收并使用像json_decode
这样的php函数将数据作为变量检索,做任何你想做的事情并通过json_encode
发回。
答案 3 :(得分:1)
尝试对列表中的URL进行url编码,然后传递给它
var encodedUrl = encodeURIComponent(url);
答案 4 :(得分:0)
您的代码中存在错误。你应该替换它:
$.post( "script.php", { urls: listOfURLs} );
用这个
$.post( "script.php", { 'urls[]': listOfURLs} );
因为listOfURLs
是javascript 数组。这可以解释为什么如果URL列表为空,您的代码可以正常工作。
请参阅post()
文档页面上的第3个示例:jQuery.post() |jQuery API
如果这没有用,我会尝试使用 Fiddler2 仔细查看代码在发布帖子时所做的调用。该程序将显示被调用的URL和发布的数据。它对于调试此类问题非常有用。
答案 5 :(得分:0)
您使用的是Nginx作为您的网络服务器吗? Nginx不支持这样的帖子请求;您可以通过在服务器下的配置中添加以下内容来解决此限制。
error_page 405 =200 $request_uri;
真正发生的是Nginx正在生成HTTP响应405,然后尝试访问HTTP 405的错误文档,并在显示的内容上获得403.
答案 6 :(得分:0)
您只需在URL后面附加一些其他字符串,例如
Handle
并将此数据传递给ajax。这样您获得的网址数据不会出现403禁止错误