首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery Ajax和PHP可以调用其他函数吗?

jQuery Ajax和PHP可以调用其他函数吗?
EN

Stack Overflow用户
提问于 2012-11-13 12:25:44
回答 2查看 169关注 0票数 0

我正在Codeigniter中构建一个基本的信用卡验证器,这里是我的HTML:

代码语言:javascript
复制
<input type="text" id="ccard" />
<input type="submit" onClick="check_cc()" name="submit_cc" value="Validar cartão!" id="checkcc" />
<div id="result"></div>

JavaScript函数:

代码语言:javascript
复制
function check_cc() {
    var cc;
    cc = $("#ccard").val();

    $.ajax({
        url: '<?php echo base_url() . "js_tests/check_cc_string"; ?>',
        type: 'POST',
        data: {credit_card : cc},
        success: function(output_string) {
            setTimeout(function() {
                $('#result').append(output_string);
            }, 1000);
        }
    });
}

(在这一点上,我不完全确定我对URL所做的操作是否真的正确。该函数似乎在控制器上触发,但不确定是否传递了cc变量)

这是我的控制器:

代码语言:javascript
复制
function check_cc_string() {
    $check = check_cc($_POST['cc'], true);
    if ($check !== false) {
        $output_string = $_POST['cc'] . " - " . $check;
    } else {
        $output_string = " - Not a match";
    }

    echo json_encode($output_string);
}

同样在控制器内部,信用卡检查程序:

代码语言:javascript
复制
function check_cc($cc, $extra_check = false) {
    $cards = array(
        "visa" => "(4\d{12}(?:\d{3})?)",
        "amex" => "(3[47]\d{13})",
        "jcb" => "(35[2-8][89]\d\d\d{10})",
        "maestro" => "((?:5020|5038|6304|6579|6761)\d{12}(?:\d\d)?)",
        "solo" => "((?:6334|6767)\d{12}(?:\d\d)?\d?)",
        "mastercard" => "(5[1-5]\d{14})",
        "switch" => "(?:(?:(?:4903|4905|4911|4936|6333|6759)\d{12})|(?:(?:564182|633110)\d{10})(\d\d)?\d?)",
    );
    $names = array("Visa", "American Express", "JCB", "Maestro", "Solo", "Mastercard", "Switch");
    $matches = array();
    $pattern = "#^(?:" . implode("|", $cards) . ")$#";
    $result = preg_match($pattern, str_replace(" ", "", $cc), $matches);
    if ($extra_check && $result > 0) {
        $result = (validatecard($cc)) ? 1 : 0;
    }
    return ($result > 0) ? $names[sizeof($matches) - 2] : false;
}

不幸的是,这还我这个:

致命错误:调用未定义函数check_cc()

我并不是这些方面的专家,但我是否有理由相信jQuery上传递的url正在直接访问该PHP函数呢?因此不能读取文件的其余部分?

是否有一种实用的方法来研究这个问题,或者我需要重新构建我的功能来包含所有的信用卡验证代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-13 12:44:43

您正在尝试将$cc作为check_cc_string函数中的一个参数访问。$.ajax向控制器发送一个httprequest,默认情况下数据通过$_POST传递。当调用check_cc时,应该使用$this->

试试这个:

代码语言:javascript
复制
function check_cc_string() {
    $c = $_POST['cc'];
    $check = $this->check_cc($c, true);
...
票数 1
EN

Stack Overflow用户

发布于 2012-11-13 12:47:08

在这一点上,我不完全确定我用URL做的事情是否真的正确

这只有在将javascript在发送到客户端之前由PHP解析时才有意义。

您是否真正定义了函数或这些方法?在后一种情况下,不存在check_cc(),但可能存在$this->check_cc()。可以通过声明方法来在方法中创建函数--但在调用该方法之前,函数是不存在的--请考虑:

代码语言:javascript
复制
class t {
  // constructor method....
  function t($r) {
    print "method called\n";

    // inline function defn.....
    function t($r) {
        print "function called\n";
    }
  }
}

$a=new t(''); // try commenting this

print t('hello');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13360736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档