数组未通过ajax传递。

时间:2014-05-06 09:10:48

标签: javascript php jquery ajax arrays

这是ajax调用的java脚本代码。在这种情况下,code变量获取c程序代码并将其传递到compiler.php页面。

function insert(){
        var code = document.getElementById("file_cont").value;
        var arr = new Array(code,"c");
        alert(arr[0]);
    var xmlhttp;
        if (window.XMLHttpRequest)
          {
          xmlhttp=new XMLHttpRequest();
          }
        else
          {
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }

        xmlhttp.onreadystatechange=function(){          
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                //window.location.assign("login.php");
                alert (xmlhttp.responseText);
            }
      }
    xmlhttp.open("POST","server_controlers/compiler.php?q="+JSON.stringify(arr),true);
    xmlhttp.send();
}

Ajax调用工作正常,但案例是在php文件中。我将jason数组解码为$arr变量。但如果我echo喜欢这个echo $arr[0],那么它就是空的。但是如果我没有像code这样在java脚本中将var arr = new Array("aaaa","c");包含在数组中,那么它的工作正常。当我使用code变量发送数组时,有些人可以告诉我有什么问题。这是php文件。

<?php
if(isset($_REQUEST["q"])){

    $arr = $_REQUEST["q"];
    $arr2 = json_decode($arr);

    echo $arr2[0];  
    /*$file = fopen("../temp_files/c/mmm.c","w");
    fwrite($file,"$arr[0]");
    fclose($file);
    shell_exec('gcc -ommm ../temp_files/c/mmm.c');
    system('mmm', $retval);*/
}else{

}

?>

2 个答案:

答案 0 :(得分:0)

server_controlers/compiler.php?q="+JSON.stringify(arr)

您的数据未设为网址安全。你说它包含c代码,这意味着它可能包含(例如)&字符,这会破坏查询字符串格式并导致JSON从中提取时无效。

在将数据放入网址之前,您需要通过encodeURIComponent运行数据。

server_controlers/compiler.php?q=" + encodeURIComponent(JSON.stringify(arr))

答案 1 :(得分:-1)

我认为你的请求中的问题类型是POST / GET。你在1中洗了2个请求类型。另外我怎么看你尝试发送get请求?但在参数中你使用POST类型。

All information what u need about GET request u can find here.

你也可以尝试改变你的PHP代码。如果你需要使用POST

 <?php
     if($_POST){
     print($_POST);
     }
?>

在你能用数据阵列完成所有工作之后。