JQuery / Ajax PHP POST вызов - PullRequest
       1

JQuery / Ajax PHP POST вызов

2 голосов
/ 08 декабря 2010

Я отправляю форму со следующим:

if ( flag ) {
jQuery.ajax({
    url: 'submit_licence.php',
    dataType: 'json',
    type: 'POST',
    data: 'flag=' + flag + '&region=' + jQuery('#licenceRegion').val() + '&lnum=' + jQuery('#enterLicence').val() + '&fname=' + jQuery('#fname').val() + '&lname=' + jQuery('#lname').val(),
    success: function( data ) {

    }
});
}

HTML

<input class="buttondb4 white2 large" type="text" value=" " id="enterLicence" />
<input type="hidden" name="licenceRegion" id="licenceRegion" value="" /> 
<input type="hidden" name="fname" id="fname" value="First" /> 
<input type="hidden" name="lname" id="lname" value="Last" />

и мой PHP:

if ($_POST){
$lnum     = noescape($_POST['lnum']);
$fname    = noescape($_POST['fname']);
$lname    = noescape($_POST['lname']);
$region   = noescape($_POST['region']);
$flag     = noescape($_POST['flag']);  

//mysql query here

}

Но когда он опубликован, он не получает никаких опубликованных данных (опубликованные значения не заполнены)

Почему не тянет данные? Что мне не хватает? Что я сделал не так?

К сожалению, я не могу опубликовать весь скрипт / страницу, так как это частный проект для клиента, хотя я думаю, что предоставил достаточно информации для того, что я пытаюсь сделать.

Ответы [ 7 ]

2 голосов
/ 08 декабря 2010

jQuery ajax вызывает сбой молча, когда ответ json искажен.

Убедитесь, что вы используете этот формат для JSON:

{"firstName": "John", "lastName": "Smith", "age": 25}

Не используйте одинарные кавычки.

PHP json_encode() делает это правильно.

Для дальнейшей отладки ошибки используйте обратный вызов complete(XMLHttpRequest, textStatus).

Второй аргумент - тип ошибки. (см. jQuery.ajax )

1 голос
/ 08 декабря 2010

Используйте Firebug для Firefox для проверки заголовков HTTP, используя Ajax и без Ajax (просто установите <form method="post"...> и добавьте <input type="submit">).

1 голос
/ 08 декабря 2010

HTML

<script type="text/javascript">
   $(document).ready(function(){
     ...
     if ( flag ) {
         $.ajax({
            url: 'submit_licence.php',
            dataType: 'json',
            type: 'POST',
            data: 'flag=' + flag + '&' + $('#someId').serialize(),
            success: function( data ) {

            }
         });
     }
   }); 
</script>
...
<form id='someId'>
  ...
  <input class="buttondb4 white2 large" type="text" value=" " id="enterLicence" />
  <input type="hidden" name="licenceRegion" id="licenceRegion" value="" /> 
  <input type="hidden" name="fname" id="fname" value="First" /> 
  <input type="hidden" name="lname" id="lname" value="Last" />
</form>

проверяет, были ли отправлены данные, "print_r ($ _ POST);", и это должно работать

 //print_r($_POST);
 if ($_POST){
  $lnum     = noescape($_POST['lnum']);
  $fname    = noescape($_POST['fname']);
  $lname    = noescape($_POST['lname']);
  $region   = noescape($_POST['region']);
  $flag     = noescape($_POST['flag']);  

  //mysql query here
  ...
  echo json_encode($result);
}
1 голос
/ 08 декабря 2010

Прочтите это на SO

Вам нужно дождаться возврата функции:

onSubmit="return sendData()"

В противном случае форма будет отправлена ​​немедленно и не будет ждать, пока данные изменятся.

внутри функции замените

document.data.submit();

на следующее:

return true;

Ссылка размещена в комментарии выше

0 голосов
/ 08 декабря 2010

Как вы подтвердили, что значения, которые вы передаете в AJAX, имеют значения? Попробуйте простое предупреждение и переменную, чтобы увидеть, что в нем.

Если в предупреждении отображается значение, измените тип данных на текст и посмотрите, передает ли он данные. НЕ ИСПОЛЬЗУЙТЕ ЭТО ДЛЯ КОНЕЧНОГО РЕШЕНИЯ, просто отладка

0 голосов
/ 08 декабря 2010

Вы не предоставили достаточно информации по этому вопросу. Как вы запускаете запрос AJAX? Если это происходит внутри обработчика submit (), вам нужно предотвратить поведение по умолчанию с помощью event.preventDefault (), иначе запрос будет отменен поведением браузера по умолчанию. Вы уверены, что вообще-то попали в утверждение? Это можно проверить с помощью Firebug, чтобы увидеть, сделан ли запрос, как предлагали многие другие.

Итак, попробуйте следующие простые вещи:

  • В обработчике событий используйте event.preventDefault для предотвращения поведения браузера по умолчанию
  • Используйте Firebug, чтобы увидеть, был ли вообще сделан запрос к серверу, и проверьте POST-данные в запросе (если он отправлен)

Поскольку вы на самом деле не предоставляете достаточно информации о том, как и где вы называете этот код, я могу только догадываться, в чем проблема.

Надеюсь, это было полезно:)

0 голосов
/ 08 декабря 2010

Будучи относительно новым для jQuery Ajax, я не уверен, но может ли это быть причиной?

данные (объект, строка): Данные для отправки на сервер. это преобразуется в строку запроса, если нет уже строка Это добавлено к URL для GET-запросов.

Возможно, поскольку это не GET, данные «падают»?

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