【问题标题】:$.ajax({ }) Post request to a PHP file is returning a null value$.ajax({ }) 对 PHP 文件的发布请求返回空值
【发布时间】:2012-11-06 11:59:40
【问题描述】:

我已经研究这个问题很长一段时间了,但似乎无法弄清楚为什么我在调用 $.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();

   ?>

【问题讨论】:

  • 顺便说一句,您可以一步创建您的data 对象:var data = { Method : "test" }; - 甚至可以使用data : { Method : "test" } 将该对象直接包含在Ajax 调用中。
  • 我真的不喜欢来自未过滤的$_POST 值的 call_user_func() 过程。就我个人而言,我要么列出允许的函数,要么列出要调用的匿名函数的哈希表。在当前状态下,您很容易受到攻击,尤其是如果您还允许用户传递参数。
  • 我们可以看看你的 mod_rewrite 吗?

标签: php javascript ajax post


【解决方案1】:

你试图调用的是一个实例方法。这样称呼它:

if(isset($_POST["Method"]))
{
      $function = $_POST["Method"];
      $method = new ReflectionMethod('methods', $function);
      $method->invoke($this);
}

【讨论】:

  • 抱歉,问题是功能问题。我很困惑你想让我把案例陈述放在哪里,但我想通了。谢谢
  • 我试过你的调用方法,我收到了这个错误。 PHP 致命错误:未捕获的异常“ReflectionException”与消息“非对象传递给 Invoke()
【解决方案2】:

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

function __construct()

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

【讨论】:

    【解决方案3】:

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

    header("Content-type: application/json");
    

    【讨论】:

    • 这并没有什么坏处,但这不是他没有输出的原因。
    【解决方案4】:

    尝试删除test 方法中的echo。你在打电话

     call_user_func($function);
    

    而你的$function 不是returning 而是echoing,.i.e

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

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

    【讨论】:

    • 这是一个 AJAX 请求。它应该是echoing。
    • 我猜echo 将在您将函数调用中的值分配给变量时起作用。但这里的情况不同。它在参数中,echo 我想在中间的某个地方迷路了。
    • @BotondBalázs 除非call_user_func 做了一些意想不到的魔法(例如丢弃输出缓冲区并回显返回值),return 用户输出将无济于事。
    • -1 从$function 返回的任何内容都将被调用者丢弃。
    • @BotondBalázs 我们是。我应该删除我的评论吗?
    猜你喜欢
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 2019-05-07
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    相关资源
    最近更新 更多