2014-09-21 34 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

相关问题