SQL-запрос с использованием AJAX в теме WordPress

#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. Итак, чтобы ответить на ваше редактирование, это была бы ошибка, которую мне нужно было бы устранить. Вы знаете, как это сделать?