Javascript变量不可见

时间:2015-07-26 16:46:01

标签: javascript php html

当我访问 call.php 页面时:

param.js无法访问变量名称 JSON ,如下所示:

这是代码:

init.js

$("document").ready(function(){
    var data = {
      "action": "init"
    };
    data = $(this).serialize() + "&" + $.param(data);
    var json;
    $.ajax({
          type: "POST",
          dataType: "json",
          url: "response.php", //Relative or absolute path to response.php file
          data: data,
          success: function(data){
                json = JSON.parse(data["json"]);
          }
    });
});

response.php

<?php
    if (is_ajax()) {
        if (isset($_POST["action"]) && !empty($_POST["action"])) { //Checks if action value exists
            $action = $_POST["action"];
            switch($action) { //Switch case for value of action
               case "init": test_function(); break;
            }
        }
    }
    function is_ajax() {
        return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
    }
    function test_function(){
        $return = $_POST;
        $return["favorite_beverage"] = "Coke";
        $return["favorite_restaurant"] = "McDonald's";
        $return["json"] = json_encode($return);
        echo json_encode($return);
    }
?>

param.js

alert(json.favorite_beverage);

call.php

<html>
<head>
<title></title>
</head>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script type="text/javascript" src="init.js"></script>
<script type="text/javascript" src="param.js"></script>
<body>
</body>
</html>

我错过了什么吗?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这里有几个问题。

  1. 变量json在函数内声明(document.ready()回调内),因此它仅在该函数中可用。您无法从该功能外部访问它。这就是变量作用域在Javascript中的工作原理。

  2. ajax成功处理程序稍后会被调用(它是异步的),因此您无法可靠地设置数据并在代码的其他部分使用它。任何想要使用ajax调用结果的代码都应该直接放入success处理程序中,或者放在从成功处理程序调用的函数中,然后将数据传递给该函数。

  3. 以下是第二点中描述的修复示例:

    $("document").ready(function(){
        var data = {
          "action": "init"
        };
        data = $(this).serialize() + "&" + $.param(data);
        var json;
        $.ajax({
              type: "POST",
              dataType: "json",
              url: "response.php", //Relative or absolute path to response.php file
              data: data,
              success: function(data){
                    json = JSON.parse(data["json"]);
                    // call a function and pass it the ajax data
                    myFunction(json);
              }
        });
    });
    
    // function located elsewhere
    function myFunction(data) {
        // process the data here
    }
    

    仅供参考,您可以在此处了解更多有关处理ajax调用返回的数据的信息:How do I return the response from an asynchronous call?