2016-02-16 214 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