1

プログラムでClosure Compilerツールにアクセスしようとしていますが、PHP と JavaScript の両方に問題があります。以下は、コンパイラの REST API をいじるためだけに作成した手っ取り早い PHP スクリプトです。

<?php
if (!empty($_POST)) {
echo '<pre>';
print_r($_POST);
echo '</pre><br />';
  foreach ($_POST as $k => &$v) $v = urlencode($v);
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
  curl_setopt($ch, CURLOPT_URL, 'http://closure-compiler.appspot.com/compile');
  echo curl_exec($ch);
} else {
  echo "
    <html>
      <body>
        <form action='' method='post'>
          <p>Type JavaScript code to optimize here:</p>
          <textarea name='js_code' cols='50' rows='5'>
            function hello(name) {
              // Greets the user
              alert('Hello, ' + name);
            }
            hello('New user');
          </textarea>
          <input type='hidden' name='compilation_level' value='WHITESPACE_ONLY' />
          <input type='hidden' name='output_format' value='json' />
          <input type='hidden' name='output_info' value='compiled_code' />
          <input type='hidden' name='warning_level' value='VERBOSE' />
          <br /><br />
          <input type='submit' value='Optimize' />
        </form>
      </body>
    </html>";
}

私が見る出力は次のとおりです。

Array
(
    [js_code] =>               function hello(name) {
                // Greets the user
                alert(\'Hello, \' + name);
              }
              hello(\'New user\');

    [compilation_level] => WHITESPACE_ONLY
    [output_format] => json
    [output_info] => compiled_code
    [warning_level] => VERBOSE
)

Error(13): No output information to produce, yet compilation was requested.

cURL optionsに問題があるのではないかと思いました。そこで、(jQuery.post()呼び出しを介して) JavaScript を試しました。私は「jQuerify 」でランダムな Firefox ウィンドウを開き、 Firebugコンソールで次のコードを実行しました。

$.post('http://closure-compiler.appspot.com/compile',
  {
   'js_code': "function hello(name) {/*Greets the user*/alert('Hello, ' + name);}",
   'compilation_level': 'SIMPLE_OPTIMIZATIONS',
   'output_format': 'text',
   'output_info': 'compiled_code'
  },
  function(response) {
    alert(response);
  }
);

「ネット」パネルには、これに対する 403 エラーが表示されます。

私は何が欠けていますか?

4

2 に答える 2

5

APIドキュメントによると

The request must always have a Content-type header of application/x-www-form-urlencoded

あなたのコードでそれを見ませんでした

追加

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/x-www-form-urlencoded'
));

curl_exec()

于 2011-01-10T18:07:30.320 に答える
1

Ajax ( jQuery またはその他の方法を使用) は、同一生成元ポリシーにより機能しません。( jsonp が結果として期待される場合を除き、ajax リクエストは同じドメイン内で制限されます)

例を使用して情報を投稿するだけで、http://www.jsfiddle.net/RySLr/に見られるように機能します

したがって、@German Rummが言及しているものに違いありません..

于 2011-01-10T18:10:41.610 に答える