2011-01-10 2 views
1

Я пытаюсь получить доступ к инструменту Closure Compilerprogrammatically, но имеет проблемы как с PHP, так и с JavaScript. Вот быстрый и грязный PHP скрипт я взбитыми просто играть с REST API для составителей:Компилятор Google Closure: проблема с программным доступом

<?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» d случайного окна 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 для этого.

Что мне не хватает?

ответ

5

Согласно API Docs

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 или иначе) не будет работать, потому что политики одного происхождения. (Ajax запросы ограничены в том же домене, если JSONP не ожидается в результате)

Просто используя свой пример, чтобы разместить информацию, она работает, как показано в http://www.jsfiddle.net/RySLr/

Так должно быть, что упоминает @German Rumm ..

+0

Duh. Я должен был это понять. Благодаря! –

Смежные вопросы