2016-02-16 176 views
0

我使用AJAX,PHP和JavaScript实现了一个计算器。计算是在PHP代码中完成的。当我向服务器发送响应请求时,我得到了PHP文件的整个源代码。我怎样才能防止这一点?服务器响应问题

这是我的JavaScript代码:

var xmlHTTP; 
    var operation; 

    function process() { 


     var number1 = document.getElementById("n1").value; 

     var num1 = parseInt(number1); 

     var number2 = document.getElementById("n2").value; 
     var num2 = parseInt(number2); 


     var answer; 
     if (document.getElementById('+').checked) { 
      operation='add'; 
     } else if (document.getElementById('-').checked) { 
      operation='subs'; 
     } 
     else if (document.getElementById('*').checked) { 
      operation='mul'; 
     } 
     else if (document.getElementById('/').checked) { 
      operation='div'; 
     } 

    } 
    function loadDoc() { 
     process(); 
     xmlHTTP=new XMLHttpRequest(); 
     xmlHTTP.onreadystatechange = function() { 
      alert(xmlHTTP.readyState); 
      alert(xmlHTTP.status); 
      if (xmlHTTP.readyState == XMLHttpRequest.DONE) { 

       document.getElementById("cal").i=xmlHTTP.responseText; 
      } 
     } 
     xmlHTTP.open("POST","process.php?value1=num1&value2=num2&value3=operation", true); 
     xmlHTTP.send(); 

    } 


    <?php 

$number1 = $_POST['value1']; 
$number2=$_POST['value2']; 
$answer=0; 
$op=$_POST['operation']; 

//echo $answer; 
if($op="add"){ 
    $answer=$number1+$number2; 
} 
elseif($op="subs"){ 
    $answer=$number1-$number2; 
} 
elseif($op="mul"){ 
    $answer=$number1*$number2; 
} 
elseif($op="div"){ 
    $answer=$number1/$number2; 
} 
else{ 
    echo "Choose an operation"; 
} 
echo $answer; 
+1

你可以告诉你正在使用的代码片段? –

+0

请您输入密码。 –

+0

您是否在启用PHP的服务器上运行它?像apache的东西? –

回答

1

为了避免整个代码被发送回AJAX功能,在PHP脚本,并caluclations尝试类似:

if($_SERVER['REQUEST_METHOD']=='POST'){ 
    ob_clean(); /* discard any output there might have been to this point */ 

    /* do the calculations */ 

    /* send response */ 
    echo $answer; 

    exit(); 
} 

末更新 现在看到你发布的附加代码我可以看到一些小错误 - 你用一个=来测试一个值是否等于某个东西,这是不正确的,因为它用于设置值。您需要使用双重==来检验相等性,或者使用===进行严格的相等性检验。 因此,在与我一起提出之前也许一些类似于此:

<?php 
    if($_SERVER['REQUEST_METHOD']=='POST'){ 
     ob_clean(); 
     $number1 = $_POST['value1']; 
     $number2 = $_POST['value2']; 
     $answer=0; 
     $op=$_POST['operation']; 


     if($op=="add"){ 
      $answer=$number1+$number2; 
     } elseif($op=="subs"){ 
      $answer=$number1-$number2; 
     } elseif($op=="mul"){ 
      $answer=$number1*$number2; 
     } elseif($op=="div"){ 
      $answer=$number1/$number2; 
     } else{ 
      echo "Choose an operation"; 
     } 
     if($answer) echo $answer; 
     exit(); 
    } 
?> 

我把你贴在JavaScript代码定睛一看,发现一对夫妇的这当然无助于问题 - 希望以下可能有帮助。

/* The values calculated inside this function would not necessarily have been available to 
    the ajax function so this function returns them as an object. */ 

function process() { 
    var operation; 
    var number1 = document.getElementById("n1").value; 
    var num1 = parseInt(number1); 

    var number2 = document.getElementById("n2").value; 
    var num2 = parseInt(number2); 

    var answer; 
    /* Are these valid IDs for DOM elements??? */ 
    if(document.getElementById('+').checked) operation='add'; 
    else if(document.getElementById('-').checked) operation='subs'; 
    else if(document.getElementById('*').checked) operation='mul'; 
    else if(document.getElementById('/').checked) operation='div'; 

    return { 
     n1:num1, 
     n2:num2, 
     op:operation  
    } 
} 

/* You never actually sent the values from the `process` function as they 
    were not properly escaped/unquoted. */ 

function loadDoc() { 
    var obj=process(); 
    var xmlHTTP=new XMLHttpRequest(); 
    xmlHTTP.onreadystatechange = function() { 
     if (xmlHTTP.readyState == 4 && xmlHTTP.status == 200) { 
      document.getElementById("cal").innerHTML=xmlHTTP.responseText; 
     } 
    } 
    xmlHTTP.open("POST", "process.php?value1="+obj.n1+"&value2="+obj.n2+"&value3="+obj.op, true); 
    xmlHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
    xmlHTTP.send(); 
} 
+0

我仍然得到相同的回应:( – Sachin

+0

顺便说一句,为什么使用这段代码“if($ answer)echo $ answer;” – Sachin

+0

最初你设置了'$ answer = 0;'和零等于false,所以我只是使用'如果($回答)回声$答案;'只回应如果不是零/假 – RamRaider

0

echo $answer;使用exit();die();后。 发送到页面的AJAX请求将返回整个页面源作为响应,如果脚本未使用exit();停止,并且它们不应该在echo $answer;之前的任何其他回显,因为它也将与您的响应一起添加。 而不是使用多个if和elseif语句,您可以使用开关大小写。

如:

... 
Switch($op) { 
    case 'add': 
     $answer=$number1+$number2; 
     break; 
    ... 
    ... 

} 


echo $answer; 
die(); 
+0

我用它,但仍然是同样的事情正在发生 – Sachin

+0

感谢我finnaly想通了:) – Sachin