【问题标题】:ajax data is getting null in controller function of MVCajax 数据在 MVC 的控制器功能中为空
【发布时间】:2020-09-02 17:54:42
【问题描述】:

我是 ajax 和 MVC 框架的初学者。我必须找到移动设备是否存在或不使用 ajax。我试过下面的代码。

查看

if(mno.match(phoneno)){
//alert(mno);
 $.ajax({
              url: "/api/sales/existmobile",
              type:"POST",
              //ContentType: 'application/json',
             // dataType: "json",
              //async: false,
              //data:{'data': mno},
              //data:{data: JSON.stringify(mno)},
              data:{data: JSON.stringify(6547655566)},
              success: function (data, textStatus, jqXHR) {
                 console.log('success',data);
                    if(data === false){
                    alert('Mobile number already exists!');
                    $( "#custmobilenumber" ).focus();
                    }              
              },  
              error: function (jqXHR, textStatus, errorThrown) {
                  console.log(textStatus);
              }
        });
}  

路线

case "sales/existmobile":
            $sale = new Sale($data);
            $result = $sale->checkMobileExistSale($result);
            break;

控制器

public function checkMobileExistSale($result)
    {
        print_r($this->data);
        // $custMdl = new CustomerModel();
        //  $mobileExistResult = $custMdl->checkMobileExist($this->data);
        // return $mobileExistResult;
    }

型号

public function checkMobileExist($mobile){
        $sql          = 'SELECT * FROM customers WHERE mobile= :mobile';
        $placeholders = [':mobile'=>$mobile];
        $users = $this->select($sql, $placeholders);
        if (count($users) > 0) {
            return false;
        } else {
            return true;
        }
    }

当我打印控制器中传递的 ajax 数据时,它即将为空。在检查的 Network(XHR)->Headers->form data 中,我可以看到从 ajax 传递的数据。但是网络(XHR)->响应,它显示为空。

我使用 stackoverflow anwsers 和谷歌搜索可以找到的所有可能方式进行调试,但没有用。我没有得到代码出错的地方。

请帮助和指导。提前致谢。

【问题讨论】:

  • 尝试在没有ajax的情况下执行checkMobileExistSale方法并打印结果。

标签: javascript php ajax codeigniter


【解决方案1】:

我已经为您的问题编写了一个可能的更正代码,我已经在必要时提到了 cmets,看看它是否对您有帮助。 :)

路线

case "sales/existmobile":
            $sale = new Sale($data);
            $result = $sale->checkMobileExistSale($data); // send $data here not $result
            break;

控制器

public function checkMobileExistSale($result)
    {
        echo $result;
        // print_r($result);
        // or try $result = $this->input->post();

        // $custMdl = new CustomerModel();
        //  $mobileExistResult = $custMdl->checkMobileExist($result); // send relevant data here
        // return $mobileExistResult;
    }

【讨论】:

  • 感谢您的帮助。它的工作。这实际上是路线错误。我修改了我的代码。但是现在如果 ajax 响应为真,那么它不会出现 if 循环并且不检查其他条件。我该怎么办?也请帮忙。
  • 在您的模型中检查$users 中的值,我认为您正在运行的查询是错误的。
  • 从那个查询我返回真/假并在 ajax 检查响应。如果它是假的,那么警报,否则我不得不说从if(mno.match(phoneno)) 循环中出来并检查它的else。那没有发生。如果ajax返回true,我写了` if (response == 'false') { alert('手机号码已经存在!'); $( "#custmobilenumber" ).focus(); } else if(response == 'true'){ return true; // 这样它就会从 if(mno.match(phoneno)) 返回但它不会出来 }`
  • echo $users看看它是否有任何值,如果没有,那么你的查询是错误的,如果是,那么通过console.log(data)检查成功的值,看看@返回的数据是什么987654327@.
【解决方案2】:

在 ajax 中你使用的是 post 方法,那么你必须在控制器中使用

$this->input->post('data');

试试这个对你有用

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 2023-03-14
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    相关资源
    最近更新 更多