【问题标题】:Calling PHP functions through AJAX using jQuery callback parameters使用jQuery回调参数通过AJAX调用PHP函数
【发布时间】:2016-02-22 14:16:49
【问题描述】:

我对使用 jQuery 的 AJAX 结果有疑问。

我已经定义了这些函数:

<script>
    function hello(callback, funct, val) {
        var ret = 0;
        console.log(val);
        $.ajax({
            type: 'GET',
            dataType: 'json',
            url: 'SGWEB/header.php',
            data: {
                'funct': funct,
                'val': val
            }
        }).done(function (data) {
            // you may safely use results here
            console.log(data);
            callback(data);
        });
    };

    function change() {
        hello(function (ret) {
                  console.log(ret);
                  $("#b1").text(ret);
              }, "hello", 1);
    }; 

    change();
</script>

SGWEB/header.php:

extract($_GET);
$validFunctions = array("readPin","hello");
if(in_array($funct, $validFunctions)) $funct();

// functions
// ....

function hello($val) {
    if ($val == 1) {
        echo "1";
    } else 
        echo "2";
}

我遇到的问题是 AJAX 仅传递数据 {'funct': funct} 中的第一个参数并且它正在工作,但 val 被完全忽略(它总是回显“2”)。

我该如何解决这个问题?谢谢

【问题讨论】:

  • 控制台有什么显示吗?
  • 您将 function 传递给 hello(),当您将其与 1 进行比较时,这是错误的。这就是它总是转到 else 分支的原因。跨度>
  • @A1rPun javascript hello 函数(代码顶部)需要一个回调函数作为它的第一个参数......代码底部的 hello 函数是一个 PHP 函数(我认为)
  • 我希望看到更多SGWEB/header.php 以了解它如何处理传入查询以最终调用 hello 函数......当然标记为 PHP 函数的代码并不是那个 header.php
  • 您需要添加正确的 PHP。我没有看到SGWEB/header.php 的内容,也没有看到您是如何在 PHP 中获取 GET 数据的。

标签: javascript php jquery ajax


【解决方案1】:

您忘记在 PHP 中将 $val 参数传递给您的函数

改变这个:

if (in_array($funct, $validFunctions)) $funct();

到这里:

if (in_array($funct, $validFunctions)) $funct($val);

另一个问题是您的 AJAX 期待 JSON,因为您在此处定义它 dataType:'json' 但您没有发送它。我会像这样重做你的 ajax 调用,这样你也可以看到其他错误:

$.ajax({
    type: 'GET',
    url: 'SGWEB/header.php',
    data: {
        'funct': funct,
        'val': val
    },
    success: function (result) {
        console.log(result);
        callback(result);
    },
    error: function (xhr, textStatus, error) {
        console.log(xhr);
        console.log(textStatus);
        console.log(error);
    }
});

【讨论】:

  • 非常感谢,我的错误有点愚蠢。尝试了答案的PHP方面并且正在工作,明天我将尝试JS代码!
  • 太棒了,很高兴我能提供帮助
  • 您好……您还知道如何在 for 循环中使用这种类型的 ajax 函数吗?如果需要可以提供代码。谢谢
  • 是的,但如果你能提供代码,最好让我明白你的意思。
  • 我明白了,您的控制台上是否出现任何错误?另外,我会用这些信息发布一个新问题。你能做到吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多