2016-01-24 2 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 2/25/16

Понял решена, ребята. переменную queryData необходимо разбить на пары key.value для отправки и получения. то есть «данные: {academy_search: queryData.value} и т. д.

Спасибо за ваш вклад, каждый.

+0

сделать запрос при загрузке страницы, но 'queryData' не определена в этой точке ... последняя строка Дж.С.' load_posts (queryData); ' – charlietfl

+0

справа. Это точно моя проблема. : -/ – brnatermedia

+0

хорошо, что вы ожидаете от этого? Либо установите значения по умолчанию в javascript или php, если $ _GET пуст ... '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_submit и scholarship_search_submit как booleans, но они достигнут сервера как строки - «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 dev или используйте скрипач, чтобы увидеть сетевой трафик. Это будет первым шагом, чтобы убедиться, что ваш URL-адрес запроса Ajax правильно отформатирован.

+0

Я записываю w/console.log(), поэтому я вижу, что возвращается объект [Object Object] ', но по-прежнему он не достигает php $ _GET. – brnatermedia

Смежные вопросы