json从php到jquery的相同函数

json from php to jquery same function

本文关键字:函数 jquery php json      更新时间:2023-09-26

我正在使用Codeigniter。

我需要访问两次php函数,但第一次我不必回显json_encode数组。。。。当我从js文件调用它时,我应该第二次回显它。我该怎么做?

因此,php文件:

function filter(){
    if (function call is not from js file ) {
      //using $_POST variable to get info from the form
      dont echo json
    }elseif (function call is from the js file) {
      echo json_encode($data); 
     //but $data should be $_POST info too, but in this case $_POST WOULD 
     //BE EMPTY and I'm sending no data to ajax
    }
}

来自js文件:

$.ajax({        
    type: "GET",
    url: "filter",       
    dataType: 'json',
   success: function(data){
     alert(data); },
   error: function(data){
     alert('error'); }

您可以进行一些搜索,找到许多不同的选项来检测PHP的AJAX请求。例如:

  • http://davidwalsh.name/detect-ajax
  • 检测ajax请求

一旦你确定它来自AJAX,你就可以传递一个像pass这样的参数,并根据传递给它一个1或2。

真正的问题是这个功能做得太多了。如果他们做不同的事情,你应该有两个不同的功能。当你开始引入这样的条件时,你违反了单一责任原则(SOLID的一部分),并要求在未来出现问题。

但是,为了完整性,您可以这样做,在大多数情况下,应该检测AJAX请求:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    // This is PROBABLY an AJAX request
    if ($_POST['pass'] == 1) {
        // First Pass
    } else if ($_POST['pass'] == 2) {
        // Second pass
    }
}

注意:这可以由客户端操作,所以不要依赖它来驱动任何需要安全的东西。顺便说一句,我并不提倡这种方法——你真的应该把关注点分开。