2012-04-02 4 views
0

У меня есть формаJquery форма сериализации вопрос

<form method="post"> 

<input type="text" name="name" /><br /> 
<input type="text" name="test1" /><br /> 
<input type="text" name="test2" /><br /> 
<input type="text" name="test3" /><br /> 
<input type="text" name="test4" /><br /> 
<input type="text" name="test5" /><br /> 
<input type="text" name="test6" /><br /> 
<input type="submit" name="submit" /><br /></form> 

И я написал JQuery Ajax скрипт, как этот

$(":input[ name= 'submit']").click(function(){ 

    var values = $("form").serialize(); 

    $.ajax({ 
     url:"test.php", 
     type:"post", 
     dataType:"json", 
     data: { 
      method: "test", 
      data: values 
     }, 
     success: function(){ 
      alert("success"); 
     }, 
     error:function(){ 
      alert("failure"); 
     } 
    }); 
    return false; 
}); 

data: { method: "test", data: values }

Но когда я прохожу два параметра ajax.data, я не могу получить к нему доступ как $ _POST ['name'] или $ _POST ['test1'] на стороне сервера. Но это возможно, если я добавлю только один параметр в элемент ajax.data.

Пожалуйста, принеси мне решение

ответ

2

Метод .serialize уже преобразует форму значения в пар ключ/значение, которые должны быть отправлены как есть на сервере. Если вы хотите передать дополнительные значения, вы можете использовать скрытое поле в форме.

Как это:

<form method="post"> 
    <input type="hidden" id="method" name="method" value="test" /> 

    <input type="text" name="name" /><br /> 
    <input type="text" name="test1" /><br /> 
    <input type="text" name="test2" /><br /> 
    <input type="text" name="test3" /><br /> 
    <input type="text" name="test4" /><br /> 
    <input type="text" name="test5" /><br /> 
    <input type="text" name="test6" /><br /> 

    <input type="submit" name="submit" /><br /> 
</form> 

, а затем:

$('form').submit(function() { 
    var values = $(this).serialize(); 
    $.ajax({ 
     url: "test.php", 
     type: "post", 
     dataType: "json", 
     data: values, 
     success: function(){ 
      alert("success"); 
     }, 
     error:function(){ 
      alert("failure"); 
     } 
    }); 
    return false; 
}); 

и если вам необходимо установить другое значение перед отправкой запроса AJAX:

$('#method').val('some other value'); 

Также обратите внимание, что Я подписался на событие .submit формы вместо события click кнопки отправки, которое также будет правильно обрабатывать случай, когда пользователь нажимает клавишу Enter, находясь внутри некоторых элементов ввода, тогда как ваш код не будет запущен, потому что кнопка отправки не была нажата, но форма была отправлена.

+0

я просто хочу знать, почему это происходит – user1066679

+0

Это потому, что происходит, как я уже говорил в моем ответе метод .serialize преобразует значения формы в 'приложения/х-WWW-форм-urlencoded' запрос готов к отправке как есть. В вашем случае вы изменяете это, добавляя некоторые другие элементы и нарушаете это соглашение. Вы не должны изменять параметр данных после его сериализации. –

+0

, но я работаю с логикой corMVC – user1066679

1

Вы должны сделать

data: values, 

таким образом, вы можете получить ваши данные $_POST['test1'];

, если вам нужно отправить дополнительное использование данных скрытых поля

EDIT, если вы используете два поле, как в вашем Примеру вы будете иметь данные в $_POST['data'] (здесь вы будете иметь последовательную форму) и $_POST['method']

EDIT 2 фактически $_POST['data'] - это строка (name=abc&test1=&test2=&test3=&test4=&test5=&test6=), потому что для сервера задана строка, если вы получаете доступ к $_POST['data']['name'], это возвращает n, потому что в php вы можете получить доступ к строкам в виде массивов, в вашем случае вы не передаете действительный индекс, и он возвращает первый символ

$name = "aghjsghjgj"; 
echo $name['name'];//this echoes the first letter as name is not a valid index 

echo $name[2];//this echoies the third letter , h 

http://codepad.org/ferFnrKW

+0

, но почему php не может получить это, если я передаю два аргумента. Пожалуйста, опишите – user1066679

+0

@ user1066679 Я отредактировал свой ответ –

+0

OK, когда я ввожу echo $ _POST ['data']; Это дает мне вывод, как name = abc & test1 = & test2 = & test3 = & test4 = & test5 = & test6 = , но когда я вхожу в $ _POST ['data'] ['name'], он дает мне «n». Почему? – user1066679

Смежные вопросы