3

我已经研究这个问题很长一段时间了,似乎无法弄清楚为什么在调用 $.ajax 函数后我一直收到 null。我输入了一个包含我的方法名称的关联数组,然后在 PHP 中调用我的方法将 aj 儿子字符串返回到前端。当我在我的 java 脚本中调用 alert 时收到 null 。这是我的代码

Java脚本:

   $(document).ready(function()
   {
     var data = {};
     data["Method"] = "test";
     $.ajax({

            url:"test.php/test",
            data: data,
            type:"POST",
            contentType:"application/json",
            dataType:"json",
            success: function(data){

            alert(data);

            },
            error:function(data, textStatus, error)
            {

            }
     });
});

PHP:

   <?

    //require_once("database.php");

    class methods
    {
      function __contructor()
      {
        if(isset($_POST["Method"]))
        {
              $function = $_POST["Method"];
              call_user_func($function);
        }
        else
        {
              echo "{\"status\":\"false\"}";
        }
     }

      function test()
      {
            $json = array( 
            "kyle" => "broflowksi",
            "eric" => "cartman",
            "stan" => "marsh"
             );
            echo json_encode($json);
      }

   }

     $method = new methods();

   ?>
4

4 回答 4

3

您要调用的是实例方法。这样称呼它:

if(isset($_POST["Method"]))
{
      $function = $_POST["Method"];
      $method = new ReflectionMethod('methods', $function);
      $method->invoke($this);
}
于 2012-11-18T09:45:04.593 回答
0

尝试在发送输出之前强制使用内容类型标头,

header("Content-type: application/json");
于 2012-11-18T09:44:48.330 回答
0

您的类构造方法中只是一个错字,应该是

function __construct()

要记住的另一件事是,我不确定您是否应该将 contentType 设置为 json,因为该变量用于您发送的内容......而不是您收到的内容。因此,如果您最终遇到 post 变量被剥离的情况,请尝试从您的 ajax 调用中删除 contentType。

于 2012-11-18T10:00:30.203 回答
-1

尝试删除echointest方法。你在打电话

 call_user_func($function);

而你$function的不是returning但是echoing,.ie

function test() {
        $json = array( 
        "kyle" => "broflowksi",
        "eric" => "cartman",
        "stan" => "marsh"
         );
        echo json_encode($json);          // This line should be returning
}

我之前用 php 函数调用(不是特别是 ajax)处理了类似的问题。

于 2012-11-18T09:37:21.010 回答