0

我有另一个问题类似于我在这里提出的问题: JS Ajax calls PHP and getting ajax call data

但是这次我处理的是 PUT 动词。我正在阅读以获取 php 中的数据应该使用以下内容:

file_get_contents("php://input")

资源:http ://www.lornajane.net/posts/2008/accessing-incoming-put-data-from-php

但是对于put,这似乎不起作用。我觉得它可能与 IIS 7 可能会删除数据有关?.. 我安装了 webDav 并且必须删除它才能让 put 动词得到解决想知道 IIS 中是否还有其他东西可能会阻止数据在服务器级别解析?

我的 ajax 请求如下所示

                var data = '{"storyId":"2","storyName":"a Changed Story.","authorId":"5", "published":"1"}'; 

                $.ajax({
                    type: "PUT",
                    url: BaseUrl + "Story/2",   
                    data: data,
                    success: function(data){
                        console.log(data);
                    },
                    error: function(request){
                        console.log(request);
                    },
                });
4

2 回答 2

1

PUT并非所有浏览器都支持和DELETEvia 。并且是所有浏览器都支持的仅有的两个。$.ajaxPOSTGET

作为参考,请在此处查看有关 `$.ajax 的 jQuery 文档:http: //api.jquery.com/jQuery.ajax/

此外,您需要更改 HTTP 守护程序的设置以允许您的脚本访问 put。这是通过将以下内容添加到您的根 .htaccess 来完成的:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ handler.php?uri=$1 [L,QSA]

请注意,您必须有权mod_rewite进行这些修改。

请参阅PUT此处的 php 文档:http: //php.net/manual/en/features.file-upload.put-method.php

于 2012-07-13T22:28:08.097 回答
1

WooHoo 由于这个问题,我想通了。

PHP 获取 PUT 请求正文

出于某种原因,如果您像这样请求“PUT”的数据

file_get_contents("php://input")

在第一次读取时,它将获取所有数据。但是,像这样使用它获取数据的第二次尝试将返回 null。这不是 POST 的情况。我只需要这样做,以便我们只请求一次上述数据。

我的理论(可能是BS);) 我认为它读取 PUT 请求的方式就像读取文件或流,如果有办法将读取器重新设置为开始可能可以获得该数据。这只是我关于它如何工作的理论我真的没有任何资源支持它是这样工作的。

于 2012-07-14T07:47:37.447 回答