JQuery для PHP: нет ввода ... вроде - PullRequest
1 голос
/ 02 июня 2010

Я использую jQuery для отправки HTTP-запросов на мою страницу PHP (Apache / Linux, если это имеет значение). Я тщательно проверяю на клиенте, чтобы пустые запросы не отправлялись. Однако в некоторых случаях я получал пустой запрос, подобный этому:
- Коллекция $ _POST пуста (коллекция $ _GET также пуста);
- Content-Length не равен нулю (число ниже 100, в соответствии с действующим POST из моего скрипта)
- Content-Type правильно application / x-www-form-urlencoded
- чтение из php: // input дает пустую строку

Как будто $ _POST как-то съедено в пути. Я очень тщательно проверил код - я ничего не делаю с содержимым $ _POST.

УТОЧНЕНИЕ: я ловлю это условие на сервере; это не так, как мой код ужасно умирает. Но у меня очень сильное чувство, что это не подлинное отсутствие пользовательского ввода, а какое-то повреждение данных в пути. Почему еще не было бы ненулевой длины содержимого?

Если проверка на стороне клиента не удалась, я получил бы $ _POST с пустыми полями. Так обстоят дела, у меня вообще нет полей. Совершенно недоумение.

Есть идеи, пожалуйста?

ОБНОВЛЕНИЕ: код отправки запроса на стороне клиента выглядит следующим образом:

var r = trim((re = document.getElementById("tread")).value),
    m = trim((me = document.getElementById("tmean")).value);
if(r == "" && m == "")
    alert("Please provide.");
else
{
    $.post(URLPrefix + "tsearch.php", {R : r, M : m, Src:"bytext"}, DoneSearch, "html");
}

Существует также другой запрос к тому же серверному сценарию, который выглядит так:

$.post(URLPrefix + "tsearch.php", {K0 : KCode(0),
    K1 : KCode(1), K2 : KCode(2), K3 : KCode(3),
    P : document.getElementById("pos").checked ? 1 : 0,
    Src:"bykanji"}, DoneSearch, "html");

Я не вижу, как этот код, где все поля являются безусловными, может обеспечить пустую коллекцию POST.

Ответы [ 2 ]

0 голосов
/ 02 июня 2010

Я бы честно предложил выполнить проверку как на стороне клиента, так и на стороне сервера.Проверка наличия пустых / нулевых входных данных в массиве $ _POST [] с использованием PHP тривиальна. Предположительно ваш JavaScript должен перехватывать пустые входные данные и не разрешать запрос, но на случай, если кто-то пропустит ваш JS, вы всегда должны дважды проверять сервер.Что-то такое простое, как:

if(empty($_POST['val']))
 // throw error

Будет работать просто отлично, вы можете либо прекратить всю обработку с этого момента, либо обработать ее любым удобным для вас способом.Если проверка данных важна, я действительно думаю, что это должно быть сделано на сервере, JavaScript (или что-либо, что строго на стороне клиента) просто слишком легко возиться.

0 голосов
/ 02 июня 2010

Если вы выполняете проверку на стороне клиента с помощью jQuery / Javascript, клиенты с отключенными сценариями не попадут на ваш код проверки. Если вы хотите проверить это, добавьте дополнительное скрытое поле и установите для него значение, используя JS в вашей форме.

например. В вашей форме есть

<input  type="hidden" value="False, JS is off" name="my-hidden-field" />    

и int javascript

$('#my-hidden-field').val('True, JS is on');

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

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