【问题标题】:json from php to jquery same functionjson 从 php 到 jquery 相同的功能
【发布时间】:2015-09-17 12:40:16
【问题描述】:

我正在使用 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'); }

【问题讨论】:

  • 为什么要调用同一个函数两次?
  • 快速破解方法是在您的 ajax 中添加一个参数 data: 并在其中存储一个变量。然后,您可以检查服务器端的变量。更多:stackoverflow.com/questions/4406348/…
  • @light bc 我正在处理一个表单(过滤信息),如果需要某些信息,那么我必须继续过滤
  • @DipenShah 我认为我有太多信息无法通过帖子再次发送它:s 我知道这可能是一个解决方案,但是如果没有这个逻辑,还有其他方法可以做我想做的事吗?
  • @Limon 然后我认为纤毛病的解决方案一针见血。您需要检查请求是否为 XMLHTTPRequest。虽然这有效,但您可能想阅读此stackoverflow.com/questions/18260537/…

标签: javascript php jquery json


【解决方案1】:

您可以通过搜索找到许多不同的选项来检测 PHP 的 AJAX 请求。例如:

一旦你确定它来自 AJAX,你可以传递一个像 pass 这样的参数,并根据哪个传递给它分配 1 或 2。不过还是很hacky。

真正的问题是这个函数做得太多了。如果他们做不同的事情,你应该有两个不同的功能。当你开始引入这样的条件时,你就违反了单一责任原则(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
    }
}

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

【讨论】:

  • 我遇到的问题是,在对 php 函数进行 ajax 调用时,我没有加载 $_POST 变量(这将是它第二次进入函数)...所以一旦出现在第一个帖子中,我将无法获得信息。这是一个过滤功能......我该怎么做?
  • 如果你必须在请求之间进行状态转移,标准机制是使用Sessions。
  • @cilosis 我按照你的建议做了,我使用了会话。我也拆分了功能。现在 ajax 函数对另一个 php 函数进行 get 调用。但我会接受你的回答,因为那是我最初的问题,而且有效。
猜你喜欢
  • 2014-07-23
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 2011-04-18
  • 2013-07-19
相关资源
最近更新 更多