2016-01-24 75 views
1

当我通过我写入的某些搜索或过滤器功能调用ajax时,完整列表被错误地返回而没有过滤器。我已经能够隔离到目前为止,发现ajax调用中的数据没有达到PHP $ _GET变量。下面是jQuery的捕获数据并创建最初运行在页面加载,当用户搜索或过滤器的AJAX调用:

jQuery(function($) { 
 
    var attempt = 1; 
 
    var scholarship_search; 
 
    var \t scholarship_region; 
 
    var \t scholarship_state; 
 
    var queryData; 
 
    var load_posts = function(queryData) { 
 
    $.ajax({ 
 
     type : 'GET', //'POST' 
 
     url : '/wp-content/themes/campuspride2015/lib/scholarship-db.php', 
 
     data : queryData, 
 
     dataType : 'html', 
 
     success : function(data, s, o) { 
 
     $('#scholarship-results-container').append(data); 
 
     console.log(attempt +' : '+ s +' : '+ queryData); 
 
     attempt ++; 
 
     } 
 
    }); 
 
    } 
 

 
    /** 
 
    * ajax call from search 
 
    **/ 
 
    $('#scholarship-search-form').on('submit', function(e) { 
 
    e.preventDefault(); // disable the normal click 
 

 
    // gather the query data 
 
    sch_search = $('#scholarship-search').val(); //coming from an input field 
 

 
    queryData = { 
 
     scholarship_search_submit : true, 
 
     scholarship_search : sch_search 
 
    }; 
 

 
    load_posts(queryData); // ajax page load 
 
    }); 
 

 
    $('#scholarship-filter-form').on('submit', function(e) { 
 
    e.preventDefault(); // disable the normal click 
 

 
    // gather the query data 
 
    sch_filter_region = $('#scholarship_region').val(); // select drop down 
 
    sch_filter_state = $('#scholarship_state').val(); // select drop down 
 

 
    queryData = { 
 
     scholarship_filter_submit : true, 
 
     scholarship_region : sch_filter_region 
 
     scholarship_state : sch_filter_state 
 
    }; 
 

 
    load_posts(queryData); // ajax page load 
 
    }); 
 

 
    load_posts(queryData); 
 

 
});

而下面是PHP脚本应该捕捉请求并返回页面数据,但由于某种原因,ajax $ .get();没有达到php $ _GET。

// WP access 
 
define('WP_USE_THEMES', false); 
 
require_once('../../../../wp-load.php'); 
 

 
// Variables that dictate the results to be shown 
 
$search_submit = (isset($_GET['scholarship_search_submit']) ? $_GET['scholarship_search_submit'] : 0); 
 
$filter_submit = (isset($_GET['scholarship_filter_submit']) ? $_GET['scholarship_filter_submit'] : 0); 
 

 
/** 
 
* Query for Scholarships 
 
**/ 
 

 
/** Check for search parameters **/ 
 
if($search_submit) { 
 
    // run query (which is not running...) 
 
} 
 

 
/** query based on filters **/ 
 
elseif($filter_submit) { 
 
    // run query (which is also not running...) 
 
} 
 

 
/** Initial page viewing, show all **/ 
 
else { 
 
    // this is running, because the $_GET variable is not being populated 
 
} ?>

任何想法?

UPDATE 16年2月25日

得到它解决了,伙计们。需要将queryData变量分解为key.value对以便发送和拾取。即`data:{scholarship_search:queryData.value} etc ...

感谢您的输入,每个人。

+0

做出请求时,页面加载但'queryData'在这一点上不确定... JS的最后一行'load_posts(queryData);' – charlietfl

+0

权。这正是我的问题。 : -/ – brnatermedia

+0

那么你期望它在页面加载时做什么?如果$ _GET为空,则设置默认值为javascript或php ... if(empty($ _ GET)){loadDefaults();} – charlietfl

回答

0

问题在于数据发送到ajax的方式。 queryData.value1等应替换为您给每个项目的新变量名称。

var load_posts = function(queryData) { 
 
    $.ajax({ 
 
     type : 'GET', //'POST' 
 
     url : '/wp-content/themes/campuspride2015/lib/scholarship-db.php', 
 
     data : { 
 
     scholarship_search_submit : queryData.value1, 
 
     scholarship_search : queryData.value2, 
 
     scholarship_filter_submit : queryData.value3, 
 
     scholarship_region : queryData.value4, 
 
     scholarship_state : queryData.value5 
 
     }, 
 
     dataType : 'html', 
 
     success : function(data, s, o) { 
 
     $('#scholarship-results-container').append(data); 
 
     console.log(attempt +' : '+ s +' : '+ queryData); 
 
     attempt ++; 
 
     } 
 
    });

0

从搜索Ajax调用查询数据,例如,应该是

queryData = { 
    'scholarship_search_submit' : true, 
    'scholarship_search' : sch_search 
}; 

添加的报价是重要的组成部分。然后当你打电话

load_posts(queryData); 

php脚本将收到你想要的$_GET变量。

+1

对于没有特殊字符的javascript对象键,引号是可选的 – charlietfl

+0

这对我来说很合理,但是现在我收到了一个错误,意外的“'”。我想下划线实际上被接受了。我也试过双引号。 – brnatermedia

0

您试图通过scholarship_filter_submitscholarship_search_submit作为布尔值,但它们将作为字符串到达​​服务器 - “true”或“false”。所以你不能在php中检查它们的值为if($search_submit)elseif($filter_submit) {。您应该使用if($search_submit==='true')elseif($filter_submit === 'true') {

+0

我以为这肯定会解决它,但仍然没有骰子... – brnatermedia

+0

当我从客户端发送并检查这些值服务器时,我会尝试将'true'替换为'1'和'false'替换为'0'侧。我曾经有同样的问题。 –

0

查看chrome开发工具或使用fiddler查看您的网络流量。这将是第一步,以确保您的Ajax请求URL格式正确。

+0

我正在记录w/console.log(),所以我看到一个'[Object Object]'正在返回,但由于某种原因,它仍然没有到达php $ _GET。 – brnatermedia