2014-09-21 24 views
-1

我有三個div s保存在array作爲simple_html_dom的對象。我需要點擊一個按鈕來更改其中兩個CSS屬性。這很簡單,但是我還需要在服務器端的PHP腳本中對CSS屬性(在存儲在上述數組中的simple_html_dom對象中)進行更改。

所以我從我的網絡搜索算出我需要AJAX爲此。所以,我讀了this tutorial,和我下面this example,並且做這樣的事情:

在客戶端:

function xyz(var divIdOne, var divIdTwo) { 
    document.getElementById(params.divIdOne).style.display = "none"; 
    document.getElementById(params.divIdTwo).style.display = "block"; 
    document.getElementById(params.divIdTwo).style.border = "5px solid red"; 

    var xmlhttp; 
    if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest();} 
    else { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } 
    xmlhttp.open("GET","myfile.php?pass_back="+"pass_back",true); 
    xmlhttp.send(); 
} 

在服務器端:

foreach($_REQUEST as $requestkey => $requestvalue) { 
    echo $requestkey.': '.$requestvalue; 
} 
if (array_key_exists('pass_back', $_REQUEST)) { 
    foreach ($array_of_divs as $div) { 
     if ($div->id=$divIdOne) { 
      $div->style='display:none'; 
     } else if ($div->id=$divIdTwo) { 
      $div->style='display:block'; 
     } 
    } 
} else {echo 'FALSE!';} 

第一foreach loop打印其他變量但不打印pass_back。下一個if塊根本不執行。執行else塊。這意味着$_REQUEST顯然不包含pass_back。任何人都可以指出爲什麼,或者我做錯了什麼?

+0

如果您使用$ _GET而不是$ _REQUEST,它會工作嗎? – 2014-09-21 17:49:53

+0

@MarceloRibeiro不! – Solace 2014-09-21 17:51:07

+1

您是否試圖直接在瀏覽器中訪問url,以確保它不是ajax調用?即直接訪問/myfile.php?pass_back=pass_back?你如何檢查PHP腳本正在打印什麼? – 2014-09-21 17:55:04

回答

0

我看不到錯誤。你如何檢查你沒有正確發送數據?我建議使用這段代碼來檢查你的服務器從你的請求中收到什麼:

function xyz() { 
     var xmlhttp; 
     if (window.XMLHttpRequest) { 
      xmlhttp = new XMLHttpRequest(); 
     } else { 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       console.log(xmlhttp.responseText);// Let's see what the server is echoing 
      } 
     } 
     xmlhttp.open("GET","myfile.php?pass_back="+"pass_back",true); 
     xmlhttp.send(); 
    } 

請讓我們知道輸出。

+0

我使用'alert()'而不是'console.log()'。它沒有提醒任何事情,也沒有任何改變。 – Solace 2014-09-21 22:47:19

+0

什麼都沒有?那很好笑。 print_r($ _ GET)發出什麼東西?你能在第一個foreach之前寫出這句話,並告訴我們警報是什麼意思嗎?謝謝。 – acontell 2014-09-22 09:12:11

+0

@arconmon [我在這裏寫了一個SSCCE](http://stackoverflow.com/questions/25981040/ajax-how-to-change-a-value-on-client-side-as-well-as-server-side你可以看到它,這將有助於更好地理解問題。 – Solace 2014-09-22 20:32:19

0

我會建議您使用jquery和firebug,並首先擺脫以下問題:爲什麼未收到回傳變量。

創建文件:test.php的

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"/> 
    <script src="https://code.jquery.com/jquery-2.1.1.js"></script> 
    <title>Html page</title> 
</head> 

<body> 


<script> 
    (function($){ 

     $.post("myfile.php", { 
      passback: "pooo" 
     }, function(d){ 
      console.log(d); 
     }); 


    })(jQuery); 

// or if you cannot use jquery 
var xmlhttp; 
if (window.XMLHttpRequest) 
{// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
} 
else 
{// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     // do something with the response, if you need it... 
     // document.getElementById("myDiv").innerHTML = xmlhttp.responseText; 
    } 
} 
xmlhttp.open("POST", "myfile.php", true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.send("passback=pooo"); 

// src: http://www.w3schools.com/ajax/ajax_xmlhttprequest_create.asp 


</script> 

</body> 
</html> 

然後創建該文件:myfile.php

<?php 



if(isset($_REQUEST['passback'])){ 
    echo "ok"; 
} 
else{ 
    echo "oops"; 
} 

接下來,下載Firefox,並下載Firebug擴展(或者你可以使用Chrome的控制檯可替代地)。這裏的目標是看看通過網絡傳遞的是什麼。

在瀏覽器中啓動test.php,打開螢火蟲控制檯(或chrome的控制檯) 並調試,直到您看到「ok」訊息。

+0

我無法使用JQuery。那就是問題所在。我可以使用YUI庫,但不能使用JQuery。如果你能告訴我一個YUI或JS的唯一方式,那將是非常棒的。 – Solace 2014-09-21 22:56:24

+0

然後,您應該嘗試將此限制添加到您的問題開始。這是一個非常大的警告。 – nathanchere 2014-09-22 12:54:50

相關問題