2013-11-01 77 views
0

我想从.php文件发送parametres到我的Javascript,但我甚至无法管理发送字符串。我不能发送PHP变量到JavaScript

的JavaScript片段:

var params = "action=getAlbums"; 
      var request = new XMLHttpRequest(); 

      request.open("POST", PHP CODE URL, true); 
      request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      request.setRequestHeader("Content-length", params.length); 
      request.setRequestHeader("Connection", "close"); 
      request.send(params); 

      request.onreadystatechange = function() { 

        var phpmessage = request.responseText; 
        alert(phpmessage); 

      }; 

PHP片段:

$deviceFunction = $_POST["action"]; 
if ($deviceFunction == "") $deviceFunction = $_GET["action"]; 

// Go to a function depending the action required 
switch ($deviceFunction) 
{ 
    case "getAlbums": 
     getAlbumsFromDB(); 
     break; 
} 



function getAlbumsFromDB() 
{ 

    echo "test message!"; 

} 

含phpmessage警报弹出,但它是空的(它实际上出现了两次)。如果我这样做,警报将不会工作:

request.onreadystatechange = function() { 
       if(request.status == 200) { 
        var phpmessage = request.responseText; 
        alert(phpmessage); 
       } 

      }; 
+2

当使用Ajax,建议使用像Dojo或jQuery这样的Javascript库来完成繁重的工作。 –

+1

现在,有几件事情可能会出错。为了缩小这个问题,我建议改变你的PHP页面来打印字符串,没有别的。即:<?php print'test message'; ?> –

回答

1

每次状态更改时都会调用readystatenchange事件。有5个国家,在这里看到:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#readyState

重写你的JS:

request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
    console.log('AJAX finished, got ' + request.status + ' status code'); 
    console.log('Response text is: ' + request.responseText); 
    } 
} 

在你的代码,你只检查返回的状态代码。上面的代码将检查就绪状态,然后输出debbuging的状态码。

我知道这个答案比回答实际问题更多的评论,但我觉得写一个答案,以包括格式良好的代码。

+0

问题是,即使我这样做,警报显示为空,而不是与我在PHP中声明的字符串 – Phob1a

+0

@ Phob1a什么是响应代码?你在调用'open()'和'send()'之前是否尝试过使用user2945107'建议来分配事件处理程序? – ComFreek

+0

我确实按照建议。你的意思是响应代码?该警报仅打印一个空字符串。 – Phob1a

0

我在使用Django时遇到过类似的问题。我做了什么: 我用模板语言来生成我需要的javascript变量。

我不是一个PHP程序员,但我会给你想法,让我现在如果作品。以下不是php代码,仅供参考。

<?php 
    <script type="text/javascript" ... > 
      SOME_VARIABLE = "{0}".format(php_function()) // php_function resolve the value you need 
    </script> 
?> 

我在脚本中使用SOME_VARIABLE。

0

请在调用打开和发送方法之前指定您的onreadystatechange事件处理程序。 您也应该根据您的请求在GET和POST方法之间进行选择。

如果你想弹出你的信息只有当你的请求对象状态正常(= 200)和readyState的完成蒙山响应准备(= 4),你可以这样写:

request.onreadystatechange = function() { 
    if (request.readyState==4 && request.status==200) { 
     var phpMessage = request.responseText; 
     alert(phpMessage); 
    } 
};