3

私は現在、 Phil SturgeonによるCodeIgniterと RESTを使用して XML を扱う RESTful Web サービスを実装しています。HTTP PUT から XML を読み取る方法に行き詰まっています。これが私がしたことです。

クライアント側で:

$(function(){
    // Bind a click event to the 'ajax' object id
    $("#new_user").click(function(evt){
        // JavaScript needs totake over. So stop the browser from redirecting the page
        evt.preventDefault();
        var str = '<?xml version="1.0" encoding="UTF-8"?><xml><name>'+$("#txtname").val()+'</name><email>'+$("#txtemail").val()+'</email></xml>';

        // Ajax request to get the data
        $.ajax({
            // URL from the link that was clicked on
            url: $(this).attr("href"),
                        type: "put",
                        contentType: "application/xml",
                        processData: false,
                        data: str,
            success: function(data, textStatus, jqXHR){
                //alert('Successful AJAX request!');
                                   //var items = parseXml(data);
                                   //printXml(items);
            },
            // Failed to load request. This could be caused by any number of problems like server issues, bad links, etc.
            error: function(jqXHR, textStatus, errorThrown){
                alert('Oh no! A problem with the Ajax request!');
            }
        });
    });
});

サーバー側:

public function users_put(){
    $input = file_get_contents('php://input');
    print_r($input);
}

何も出力しません。上記の JavaScript コードと関数は、HTTP POST でうまく機能します。

4

2 に答える 2

2

マニュアルにはそのための良いリファレンスがあります:http://php.net/manual/en/features.file-upload.put-method.php

HTTPデーモンの設定を変更せずにPUTリクエストを処理することはできません。


Apacheを使用していて、mod_rewriteにアクセスできる場合は、ルートフォルダーに次のような.htaccessファイルを作成します。

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

ただし、詳細は、使用するHTTPデーモン(Apache、IIS、lighttpdなど)と使用するPHPフレームワークによって異なります。

于 2011-07-25T08:52:28.730 に答える
0

POST を使用します。アプリケーションは、リクエストが「PUT」かどうかを判断する必要があります。変更するオブジェクトの ID を指定すると、それが「PUT」リクエストであると想定できます。CodeIgniter がこれをどのように処理するかはわかりませんが、id が指定されたときに Zend Framework が自動的に putAction にルーティングすることは知っています。(例: /アカウント/5)

于 2011-07-28T18:25:47.923 に答える