草庐IT

javascript - 使 Ideone API 在 Codeigniter 上工作(ajax、javascript、soapclient)

coder 2024-04-20 原文

这是我第一次使用 Codeigniter。很抱歉,如果我的问题是菜鸟。 我从这个网站得到代码:Working with IDE One API (完整的项目代码是 here )现在,我正尝试在 codeigniter 中使用它。

我能够让它工作到下面的 javascript 部分(因为它能够检查“来源”是否有值(value))。

script.js:

$(document).ready(function() {
$('#myform').submit( function(){
    var data = $(this).serialize();
    var source = $('textarea#source').val();

    if( source == '' ) {
        alert( 'No source code provided');
        return false;
    }

    $(this).append('<div class="loading">Processing...</div>');

    $.ajax({
        type: "POST",
        url: "<?php echo base_url();?>student/submit",
        dataType: 'json',
        data: data + '&process=1',
        cache: false,
        success: function(response){
            $('.loading').remove();
            $('.cmpinfo').remove();
            $('#response').show();
            //alert(response);
            console.log(response.raw);
            if( response.status == 'success' ) {
                $('.meta').text( response.meta );
                $('.output').html('<strong>Output</strong>: <br><br><pre>' + response.output + '</pre>');

                if( response.cmpinfo ) {
                    $('.cmpinfo').remove();
                    $('.meta').after('<div class="cmpinfo"></div>');
                    $('.cmpinfo').html('<strong>Compiler Info: </strong> <br><br>' + response.cmpinfo );
                }

            } else {
                //$('.output').html('<pre>' + response + '</pre>');
                alert( response.output );
            }
            //alert( response.msg );
        }
    });

    return false;
});
});

我的问题是我不确定它是否能够在我的学生中实现“提交”功能

controller 还是函数本身的问题。

学生/提交:

    public function submit(){
    $user = 'myuser';
    $pass = 'mypassword';
    $code = '';
    $input = '';
    $run = true;
    $private = false;

    $subStatus = array(
        0 => 'Success',
        1 => 'Compiled',
        3 => 'Running',
        11 => 'Compilation Error',
        12 => 'Runtime Error',
        13 => 'Timelimit exceeded',
        15 => 'Success',
        17 => 'memory limit exceeded',
        19 => 'illegal system call',
        20 => 'internal error'
    );

    $error = array(
        'status' => 'error',
        'output' => 'Something went wrong :('
    );

    //echo json_encode( array( 'hi', 1 ) ); exit;
    //print_r( $_POST ); exit;

    if ( isset( $_POST['process'] ) && $_POST['process'] == 1 ) {
        $lang = isset( $_POST['lang'] ) ? intval( $_POST['lang'] ) : 1;
        $input = trim( $_POST['input'] );
        $code = trim( $_POST['source'] );

        $client = new SoapClient( "http://ideone.com/api/1/service.wsdl" );

        //create new submission
        $result = $client->createSubmission( $user, $pass, $code, $lang, $input, $run, $private );

        //if submission is OK, get the status
        if ( $result['error'] == 'OK' ) {
            $status = $client->getSubmissionStatus( $user, $pass, $result['link'] );
            if ( $status['error'] == 'OK' ) {

                //check if the status is 0, otherwise getSubmissionStatus again
                while ( $status['status'] != 0 ) {
                    sleep( 3 ); //sleep 3 seconds
                    $status = $client->getSubmissionStatus( $user, $pass, $result['link'] );
                }

                //finally get the submission results
                $details = $client->getSubmissionDetails( $user, $pass, $result['link'], true, true, true, true, true );
                if ( $details['error'] == 'OK' ) {
                    //print_r( $details );
                    if ( $details['status'] < 0 ) {
                        $status = 'waiting for compilation';
                    } else {
                        $status = $subStatus[$details['status']];
                    }

                    $data = array(
                        'status' => 'success',
                        'meta' => "Status: $status | Memory: {$details['memory']} | Returned value: {$details['status']} | Time: {$details['time']}s",
                        'output' => htmlspecialchars( $details['output'] ),
                        'raw' => $details
                    );

                    if( $details['cmpinfo'] ) {
                        $data['cmpinfo'] = $details['cmpinfo'];
                    }

                    echo json_encode( $data );
                } else {
                    //we got some error :(
                    //print_r( $details );
                    echo json_encode( $error );
                }
            } else {
                //we got some error :(
                //print_r( $status );
                echo json_encode( $error );
            }
        } else {
            //we got some error :(
            //print_r( $result );
            echo json_encode( $error );
        }
    }

    }

View 部分:

<div id="wrapper">
        <h1><a href="index.php">Online Compiler</a></h1>
        <?php echo form_open("student/submit",array('id' => 'myform'));  ?>
            <div>
            <label for="lang">Select Language:</label>
            <select name="lang" id="lang">
                <option value="7    ">Ada (gnat-4.3.2)</option>
                <option value="13">Assembler (nasm-2.07)</option>
                <option value="45">Assembler (gcc-4.3.4)</option>
                <option value="104">AWK (gawk) (gawk-3.1.6)</option>
                <option value="105">AWK (mawk) (mawk-1.3.3)</option>
                <option value="28">Bash (bash 4.0.35)</option>
                <option value="110">bc (bc-1.06.95)</option>
                <option value="12">Brainf**k (bff-1.0.3.1)</option>
                <option value="11">C (gcc-4.3.4)</option>
                <option value="27">C# (mono-2.8)</option>
                <option value="1" selected="selected">C++ (gcc-4.3.4)</option>
                <option value="44">C++0x (gcc-4.5.1)</option>
                <option value="34">C99 strict (gcc-4.3.4)</option>
                <option value="14">CLIPS (clips 6.24)</option>
                <option value="111">Clojure (clojure 1.1.0)</option>
                <option value="118">COBOL (open-cobol-1.0)</option>
                <option value="106">COBOL 85 (tinycobol-0.65.9)</option>
                <option value="32">Common Lisp (clisp) (clisp 2.47)</option>
                <option value="102">D (dmd) (dmd-2.042)</option>
                <option value="36">Erlang (erl-5.7.3)</option>
                <option value="124">F# (fsharp-2.0.0)</option>
                <option value="123">Factor (factor-0.93)</option>
                <option value="125">Falcon (falcon-0.9.6.6)</option>
                <option value="107">Forth (gforth-0.7.0)</option>
                <option value="5">Fortran (gfortran-4.3.4)</option>
                <option value="114">Go (gc-2010-07-14)</option>
                <option value="121">Groovy (groovy-1.7)</option>
                <option value="21">Haskell (ghc-6.8.2)</option>
                <option value="16">Icon (iconc 9.4.3)</option>
                <option value="9">Intercal (c-intercal 28.0-r1)</option>
                <option value="10">Java (sun-jdk-1.6.0.17)</option>
                <option value="35">JavaScript (rhino) (rhino-1.6.5)</option>
                <option value="112">JavaScript (spidermonkey) (spidermonkey-1.7)</option>
                <option value="26">Lua (luac 5.1.4)</option>
                <option value="30">Nemerle (ncc 0.9.3)</option>
                <option value="25">Nice (nicec 0.9.6)</option>
                <option value="122">Nimrod (nimrod-0.8.8)</option>
                <option value="43">Objective-C (gcc-4.5.1)</option>
                <option value="8">Ocaml (ocamlopt 3.10.2)</option>
                <option value="119">Oz (mozart-1.4.0)</option>
                <option value="22">Pascal (fpc) (fpc 2.2.0)</option>
                <option value="2">Pascal (gpc) (gpc 20070904)</option>
                <option value="3">Perl (perl 5.12.1)</option>
                <option value="54">Perl 6 (rakudo-2010.08)</option>
                <option value="29">PHP (php 5.2.11)</option>
                <option value="19">Pike (pike 7.6.86)</option>
                <option value="108">Prolog (gnu) (gprolog-1.3.1)</option>
                <option value="15">Prolog (swi) (swipl 5.6.64)</option>
                <option value="4">Python (python 2.6.4)</option>
                <option value="116">Python 3 (python-3.1.2)</option>
                <option value="117">R (R-2.11.1)</option>
                <option value="17">Ruby (ruby-1.9.2)</option>
                <option value="39">Scala (scala-2.8.0.final)</option>
                <option value="33">Scheme (guile) (guile 1.8.5)</option>
                <option value="23">Smalltalk (gst 3.1)</option>
                <option value="40">SQL (sqlite3-3.7.3)</option>
                <option value="38">Tcl (tclsh 8.5.7)</option>
                <option value="62">Text (text 6.10)</option>
                <option value="115">Unlambda (unlambda-2.0.0)</option>
                <option value="101">Visual Basic .NET (mono-2.4.2.3)</option>
                <option value="6">Whitespace (wspace 0.3)</option>
            </select>
        </div>

        <div>
            <label for="source">Source Code:</label>
            <textarea cols="40" rows="10" name="source" id="source"></textarea>
        </div>

        <div >
            <label for="input">Input: <span class="description">(Data that will be given to the program on the stdin.)</span></label>
            <textarea cols="40" rows="3" name="input" id="input"></textarea>
        </div>

        <div>
            <input type="submit" name="submit" value="Submit" />
        </div>
   <?php echo form_close(); ?>

    <div id="response">
        <div class="meta"></div>
        <div class="output"></div>
    </div>


</div>

它只是停留在“Processing”显示的部分,之后没有任何反应。请帮我。非常感谢:(

我不确定这是否有助于解决问题。但是当我跟踪网络请求时,我得到“Disallowed Key Characters”作为“响应”。我认为这是因为请求 URL:

//localhost/ci_user/index.php/student/%3C?php%20echo%20base_url();%20?%3Estudent/submit

我有进展吗?请帮忙

最佳答案

我明白了!感谢一位 friend 教我 Chrome 的“CTR+SHIFT+I”。 请求 URL 确实是错误。

我只是在脚本的 AJAX 发布请求中更改了这部分:

 url: "<?php echo base_url();?>student/submit",

    url: "submit",

CI 发送的响应/错误是“Disallowed Key Characters”,这是因为过多的 php 代码与请求 URL(带有 base_url() 的那个)混淆了。

多亏了这个问题(不管这个问题多么简单),我能够很好地介绍 codeigniter 解决方法。

关于javascript - 使 Ideone API 在 Codeigniter 上工作(ajax、javascript、soapclient),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18944839/

有关javascript - 使 Ideone API 在 Codeigniter 上工作(ajax、javascript、soapclient)的更多相关文章

  1. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  2. jquery - 如何将 AJAX 变量从 jQuery 传递到他们的 Controller ? - 2

    我有一个电子邮件表格。但是我正在制作一个测试电子邮件表单,用户可以在其中添加一个唯一的电子邮件,并让电子邮件测试将其发送到该特定电子邮件。为了简单起见,我决定让测试电子邮件通过ajax执行,并将整个内容粘贴到另一个电子邮件表单中。我不知道如何将变量从我的HAML发送到我的Controllernew.html.haml-form_tagadmin_email_blast_pathdoSubject%br=text_field_tag'subject',:class=>"mass_email_subject"%brBody%br=text_area_tag'message','',:nam

  3. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  4. ruby - []如何在Ruby中的类上工作 - 2

    我看到我可以使用获取目录中的文件列表Dir["*"]我应该如何准确阅读该语法?据我所知,您可以使用[]从数组或散列中获取值。[]如何处理通话? 最佳答案 []只是一个方法,如#to_s、#object_id。等你可以在任何对象上定义它:classCoolClassdef[](v)puts"hello#{v}"endendCoolClass.new["John"]#=>"helloJohn"在你的情况下,它被定义为单例方法,以这种方式:classDirdefself.[](v)...endend

  5. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

  6. javascript - jQuery 的 jquery-1.10.2.min.map 正在触发 404(未找到) - 2

    我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文

  7. ruby-on-rails - 我将 Rails3 与 tinymce 一起使用。如何呈现用户关闭浏览器javascript然后输入xss? - 2

    我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如

  8. ruby-on-rails - "Rake spec"大多数测试失败,但 "rails s"在 Diaspora 源上工作正常 - 2

    我已经克隆了Diaspora的源代码,并且我有一个可以正常运行的本地pod,它似乎可以正常运行。但是当我运行$rakespec时,一些初始测试通过了,然后所有测试都开始失败。此外,我发现有趣的是,每次运行rakespec时,它们都会在不同的点失败。它们都因错误而失败:AnerroroccurredinanafterhookActiveRecord::StatementInvalid:PG::ConnectionBad:PQsocket()can'tgetsocketdescriptor:ROLLBACKoccurredat/home/darshan/.rvm/gems/ruby-2.0

  9. ruby - 使用 Selenium WebDriver 启用/禁用 javascript - 2

    出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=

  10. ruby-on-rails - Phusion Passenger 不在 Apache 上工作 - 2

    更新:当输入“passenger-memory-stats”时,我显示:---Passengerprocesses---Processes:0我该如何解决这个问题?为什么即使我在httpd.conf中添加它并重新启动apache,passenger也不会启动?我无法让PhusionPassenger在服务器上运行RubyonRails。我已经按照Phusion网站上的所有说明安装了passenger并修改并创建了ApacheVirtualHost以指向新目录并验证所有.conf文件都已成功加载。还加载了httpd-Mpassenger_module。我还在本地主机上成功运行了Passe

随机推荐