#javascript #mysql #sql #ajax #wordpress
#javascript #mysql #sql #ajax #wordpress
Вопрос:
Я пытаюсь использовать AJAX для вставки данных в базу данных, но не могу подключиться к файлу .php на стороне сервера. Я думаю, это связано с тем, что все это выполняется на WordPress, поэтому мой обычный URL-путь к файлу .php может быть неправильным.
Вот моя настройка:
Файл шаблона:
$('#newsletter-register').submit(function(){
var ajaxRequest; // The variable that makes Ajax possible!
try{
// Opera 8.0 , Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
alert(ajaxRequest.responseText);
}
}
ajaxRequest.open("GET", "register_newsletter.php", true);
ajaxRequest.send(null);
});
‘#newsletter-register’ — это форма, которую пользователь будет использовать для отправки своей информации. Предупреждение, когда ajaxRequest находится в состоянии готовности 4, выдается правильно, но будет иметь пустое значение.
Мой php — это простое эхо, возвращающее строку, сигнализирующую о том, что соединение правильное (в настоящее время я просто пытаюсь проверить, правильно ли файлы вызывают друг друга).
Я думаю, что это должен быть URL-путь к register_newsletter.php поскольку я пробовал размещать код внутри файла шаблона, снаружи и т. Д.
Мой файл javascript находится в /theme/assets/js/code.js где в качестве моих файлов шаблонов (включая register_newsletter.php file) в /theme.
Есть идеи?
Комментарии:
1. Это не имеет прямого отношения к вопросу, но похоже, что вы используете jQuery, поэтому вам не нужно определять свой собственный
ajaxRequest
— вы можете просто использовать$.ajax()
!2. это стоит отметить, спасибо andre_roesti!
Ответ №1:
Вчера у меня была такая проблема. В моей ситуации доступ к странице будет осуществляться только с
www.site.com/aFolder/
Скрипт был сохранен в моем
'/wp-content/themes/themeName/processForm.php'
папка.
и URL-адрес, который я использовал, был:
../wp-content/themes/themeName/processForm.php
Мой JS был просто в начале основного header.php файл, но обратите внимание, что URL-адрес, который я должен был использовать, был относительно URL-адреса страницы, с которой был получен доступ к скрипту.
Проливает ли это какой-либо свет на вещи?
Редактировать:
В качестве шагов по устранению неполадок попробуйте убедиться, что вы можете получить доступ к вашему php-файлу по его абсолютному URL, и посмотрите в firebug, чтобы увидеть, какая ссылка вызывается при запуске ajax-запроса, чтобы увидеть, соответствует ли она тому, что вы ожидаете.
Комментарии:
1. Я думаю, что это то, чего я не понимаю — хорошо, поэтому я добавил свой скрипт в мой header.php файл, так что теперь он встроен, как вы это сделали. The header.php включается в страницы, содержащие форму. Поскольку мой PHP-файл, который будет обрабатывать форму, находится в том же каталоге, что и ваш (/wp-content/themes/themeName/processForm.php ), я также добавил ваш URL-адрес при вызове файла .php через AJAX (../wp-content/themes/themeName/processForm.php ). Я не понимаю, почему это должно быть «относительно URL-адреса страницы, с которой был получен доступ к скрипту», или что вы подразумеваете под этим.
2. Что я имел в виду под комментарием, так это то, что header.php файл включен в каждую страницу, и к этим страницам можно получить доступ (с помощью постоянных ссылок) с site.com / или site.com/pageName (например). Когда вы делаете свой ajax-запрос, вам нужно сделать его из контекста вызывающей страницы (URL, который вы используете для просмотра страницы). В моем примере мне нужно было вернуться в один каталог из из www.site.com/pageName вернуться к www.site.com а потом вверх /wp-content/themes/themename/processForm.php . Это относится к URL, который активен в момент, когда вы делаете запрос ajax, а не к исходному местоположению файла
3. Если ваш скрипт находится в каталоге темы, вы можете просто использовать
bloginfo('theme_directory')
в качестве пути для скрипта. Но посколькуreadyState = 4
запускается, путь вашего скрипта, вероятно, не проблема.4. кажется, что readyState = 4 запускается, даже если я вызываю несуществующий файл .php. Я выполнил шаги от сайта до создания AJAX-скрипта, и я не могу найти какой-либо ошибочной логики в своем коде, но я согласен, что readyState не должно быть = 4, как есть.
5. @dougajmcdonald Для вашего редактирования я не могу получить доступ к файлу .php, используя его абсолютный URL. это выдает мне ошибку php, что такого файла не существует. Я предположил, что это потому, что я не мог получить доступ к файлам .php напрямую из его абсолютного пути, поскольку он привязан к WordPress. Итак, чтобы ответить на ваше редактирование, это была бы ошибка, которую мне нужно было бы устранить. Вы знаете, как это сделать?