Чтобы понять строку jQuery - PullRequest
0 голосов
/ 22 августа 2009

Что означает следующая строка?

jQuery.post('/codes/handlers/delete_a_question.php', 
{ question_id: jQuery(this).attr('question_id') }

Контекст в заголовке,

jQuery('a.delete_question').live('click', function(){
    jQuery.post('/codes/handlers/delete_a_question.php', 
    { question_id: jQuery(this).attr('question_id') }, 
        function(data){
            alert ("Output of the delete.php -page: " + data );
                                        // `data` is probably unnecessary
    }) 
});

Мой обработчик в /codes/delete_a_question.php,

$dbconn = pg_connect("host=localhost port=5432 dbname=noa user=noa password=123");
$result = pg_prepare ( $dbconn, "delete_question_query",
    "DELETE FROM questions
    WHERE question_id = $1"
);
$result = pg_execute ( $dbconn, "delete_question_query", array ( $_GET['question_id'] ) );
header( "Location: /codes/index.php?successful_removal");

HTML

 echo ("<a href='#' class='delete_question'"
      . " id=question_id'" . $question_id . "'"   // to have question_id777
      . ">delete</a>"
 );

Я пытаюсь удалить вопрос, если пользователь сначала щелкает ссылку, получая идентификатор вопроса из GET. Однако мне не удалось заставить работать код jQuery. Я получаю следующее всплывающее окно, и вопрос не удаляется.

Теперь я получаю как всплывающее окно этот код после решения проблемы с одним ( и изменения $_GET на $_POST.

Ответы [ 5 ]

2 голосов
/ 22 августа 2009

Если вы переведете его на простой английский, этот код:

jQuery.post('/codes/handlers/delete_a_question.php', 
{ question_id: jQuery(this).attr('question_id') }

гласит:

"Асинхронно сделать запрос POST для '/codes/handlers/delete_a_question.php' с параметром 'question_id', значением которого должно быть значение html-атрибута question_id 'this'."

В вашем случае «это» будет означать ссылку, по которой вы нажимаете, чтобы удалить вопрос. Он ищет атрибут с именем 'question_id', который не является допустимым атрибутом атрибута HTML (или XHTML) для тега привязки. Это может быть причиной проблемы.

Где в теге ссылки вы храните идентификатор вопроса? Если вы используете XHTML, вы можете использовать атрибут «rel», чья работа заключается в том, чтобы определить связь между якорем и тем, на что он ссылается (в данном случае это может быть связь между ссылкой и вопросом, который нужно удалить).

Так измените это:

<a href="#" class="delete_question" question_id="123">delete</a>

К этому:

<a href="#" class="delete_question" rel="123">delete</a>

и затем в вашем javascript / jQuery измените это:

{ question_id: jQuery(this).attr('question_id') }

на это:

{ question_id: jQuery(this).attr('rel') }
1 голос
/ 22 августа 2009

Мне кажется, что проблема в коде PHP, а не в jQuery -

Проблема, с которой вы столкнулись, вероятно связана с тем, что вы получаете параметр "question_id" с помощью метода $ _GET:

$_GET['question_id']

, который получает параметры только из запроса GET. В этом случае вы делаете запрос POST (с помощью функции jQuery.post ()), поэтому вы должны использовать

$_POST['question_id']

вместо.

1 голос
/ 22 августа 2009

Подпись метода для $. Post :

jQuery.post( url, [data], [callback], [type] )

Итак, в этой строке:

jQuery.post('/codes/handlers/delete_a_question.php', 
{ question_id: jQuery(this).attr('question_id') }

первый строковый параметр - это URL, на который будет отправлен запрос на публикацию, а второй - объект, содержащий данные в виде пар ключ / значение. Третий (который в случае вашего кода появляется на следующей строке) - это функция обратного вызова. Единственный обязательный параметр - первый.

Метод $ .post JQuery инкапсулирует вызов $. Ajax с опцией типа, установленной в "POST".

1 голос
/ 22 августа 2009

Ваше решение не совсем относится к вашему вопросу, но вам не хватает ) в строке pg_execute в вашем PHP, и именно в этом и заключается ошибка.

1 голос
/ 22 августа 2009

сообщение

Загрузка удаленной страницы с помощью HTTP POST запрос.

В этом случае загружает delete_a_question.php

атр

Второй параметр - это пары ключ / значение или возвращаемое значение функции .serialize (), которая будет отправлена ​​на сервер.

В этом случае атрибут question_id выбранной привязки берется

* * 1 022 функция (данные) * * 1 023

- это функция обратного вызова , которая должна выполняться при успешной загрузке данных.

1029 ** * жить 1030 ** * 1031

привязывает обработчик к событию для соответствующего элемента.

В этом случае связывает обработчик события щелчка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...