2011-01-10 14 views
1

Closure Compilerツールprogrammaticallyにアクセスしようとしていますが、PHPとJavaScriptの両方に問題があります。ここで私はちょうどコンパイラRESTのAPIで遊んまでホイップ迅速かつ汚いPHPスクリプトです:Googleクローズコンパイラ:プログラムによるアクセスの問題

<?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。だから私はJavaScriptを(jQuery.post()呼び出しを介して)試みました。私は「jQuerifyは、」ランダムFirefoxウィンドウをdと、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エラーが表示されます。

私には何が欠けていますか? APIドキュメントによると

答えて

5

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()

+0

ありがとう!それを十数回読む必要があります。 –

1

のAjax(jQueryの経由またはその他)の前になぜなら、同じ出身政策の(JSONPは結果として期待されていない限りAJAXリクエストは、同じドメインに制限されている)http://www.jsfiddle.net/RySLr/

に見られるように

は、単に情報を投稿するあなたの例を使用して、それはそう、それは@German Rummが言及するものでなければならない作品..

+0

Duh。私はこれを認識していたはずです。ありがとう! –