


javascript - jquery's $.ajax() submits incorrect data to php's post
<code>$('#form1').submit(function(){ $.ajax({ url:'login.php?act=login', data:$('#form1').serialize(), type:'POST', dataType:'text', beforeSend:function(){ } if($('#password').val()==''){ alert('密碼不能為空'); return false; }else{ var p = $('#password').val(); alert(p); $('#password').val(hex_md5(p)); alert($('#password').val()); } }, success:function(msg){ ...... }; } }); return false; });</code>
That’s right, my purpose is to perform md5 calculation on the password before submitting it to achieve the function of encrypting and transmitting the password.
But the actual effect is that when my password value is 123, alert($('#password').val()) prints out correctly 202cb962ac59075b964b07152d234b70, but after posting to the background php, it is still 123.
I feel like data:$('#form1').serialize() has already taken the value before beforeSend, so the old value is still passed later.
After testing, if I take out the md5 encryption part and put it before $.ajax() for operation, there will be no problem. It’s just inconvenient to use like this. Is there any way to make serialize() execute after beforeSend?
Supplement:
After using the method provided by @lisfan, the submission is normal
<code>$('#form1').submit(function(){ $.ajax({ url:'login.php?act=login', **data:null,** type:'POST', dataType:'text', beforeSend:function(){ } if($('#password').val()==''){ alert('密碼不能為空'); return false; }else{ var p = $('#password').val(); alert(p); $('#password').val(hex_md5(p)); alert($('#password').val()); **this.data=$('#form1').serialize();** } }, success:function(msg){ ...... }; } }); return false; });</code>
But neither $_REQUEST nor $_POST in the background php can receive data. As shown below:
The following is the post data seen by firebug. The above is the data of php printing $_REQUEST, $_POST and php://input respectively. You can see that the original data is seen in file_get_contents("php://input") Data, but why is it not encapsulated in $_POST?
.
Reply content:
<code>$('#form1').submit(function(){ $.ajax({ url:'login.php?act=login', data:$('#form1').serialize(), type:'POST', dataType:'text', beforeSend:function(){ } if($('#password').val()==''){ alert('密碼不能為空'); return false; }else{ var p = $('#password').val(); alert(p); $('#password').val(hex_md5(p)); alert($('#password').val()); } }, success:function(msg){ ...... }; } }); return false; });</code>
That’s right, my purpose is to perform md5 calculation on the password before submitting it to achieve the function of encrypting and transmitting the password.
But the actual effect is that when my password value is 123, alert($('#password').val()) prints out correctly 202cb962ac59075b964b07152d234b70, but after posting to the background php, it is still 123.
I feel like data:$('#form1').serialize() has already taken the value before beforeSend, so the old value is still passed later.
After testing, if I take out the md5 encryption part and put it before $.ajax() for operation, there will be no problem. It’s just inconvenient to use like this. Is there any way to make serialize() execute after beforeSend?
Supplement:
After using the method provided by @lisfan, the submission is normal
<code>$('#form1').submit(function(){ $.ajax({ url:'login.php?act=login', **data:null,** type:'POST', dataType:'text', beforeSend:function(){ } if($('#password').val()==''){ alert('密碼不能為空'); return false; }else{ var p = $('#password').val(); alert(p); $('#password').val(hex_md5(p)); alert($('#password').val()); **this.data=$('#form1').serialize();** } }, success:function(msg){ ...... }; } }); return false; });</code>
But neither $_REQUEST nor $_POST in the background php can receive data. As shown below:
The following is the post data seen by firebug. The above is the data of php printing $_REQUEST, $_POST and php://input respectively. You can see that the original data is seen in file_get_contents("php://input") Data, but why is it not encapsulated in $_POST?
.
Without modifying the original structure of the question, try modifying it as follows and look at the position of the asterisk *
<code>$('#form1').submit(function(){ $.ajax({ url:'login.php?act=login', **data:null,** type:'POST', dataType:'text', beforeSend:function(){ } if($('#password').val()==''){ alert('密碼不能為空'); return false; }else{ var p = $('#password').val(); alert(p); $('#password').val(hex_md5(p)); alert($('#password').val()); **this.data=$('#form1').serialize();** } }, success:function(msg){ ...... }; } }); return false; });</code>
You can process the password before sending the $.AJAX() request. That is to process the content of the beforeSend function first, and then send the request, so that the data of $('#form1').serialize() is correct
This shows that the function $('#form1').serialize() is called before beforeSend.
It is recommended that when you enter the password in the verification function, if the verification is passed, directly encrypt it and assign it to a hidden field in the form
$('#form1').submit(function() { if ($('#password').val() == '') { alert('密碼不能為空'); return false; } var p = $('#password').val(); alert(p); $('#password').val(hex_md5(p)); alert($('#password').val()); $.post('login.php?act=login', $(this).serialize(), function(msg) { console.log(msg); } ); return false; });
Take out the judgment and put ajax behind the password encryption.
This is because when executing $.ajax, the js engine will create a literal object. When the object is created, the value of data is stored as the return value of $('#form1').serialize() at that time, also That’s 123.
You can see the following example:
var c=1;
var a={
<code>b:c, d : function(){ c=2 }</code>};
console.log(a.b);// 1
a.d();//c=2
console.log(a.b);// 1
This can be explained The above question is gone.
The possible solution is to move the md5 encryption before creating the literal object.
First of all, since md5 is required, why do we need to assign it to the input of password? Is there no security risk? Secondly, the beforeSend function is called before sending the request, not before the Ajax method. When you call the ajax method, you have already taken out the form data and set it into the parameters of the function. How can the form value modified later be automatically updated? When it comes to ajax data, it is completely whimsical. Just put the password md5 operation before calling the Ajax method
Prepare the encrypted password string before the ajax method

PHP remains important in modern web development, especially in content management and e-commerce platforms. 1) PHP has a rich ecosystem and strong framework support, such as Laravel and Symfony. 2) Performance optimization can be achieved through OPcache and Nginx. 3) PHP8.0 introduces JIT compiler to improve performance. 4) Cloud-native applications are deployed through Docker and Kubernetes to improve flexibility and scalability.

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.

PHP and Python each have their own advantages and are suitable for different scenarios. 1.PHP is suitable for web development and provides built-in web servers and rich function libraries. 2. Python is suitable for data science and machine learning, with concise syntax and a powerful standard library. When choosing, it should be decided based on project requirements.

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

The reasons why PHP is the preferred technology stack for many websites include its ease of use, strong community support, and widespread use. 1) Easy to learn and use, suitable for beginners. 2) Have a huge developer community and rich resources. 3) Widely used in WordPress, Drupal and other platforms. 4) Integrate tightly with web servers to simplify development deployment.

PHP remains a powerful and widely used tool in modern programming, especially in the field of web development. 1) PHP is easy to use and seamlessly integrated with databases, and is the first choice for many developers. 2) It supports dynamic content generation and object-oriented programming, suitable for quickly creating and maintaining websites. 3) PHP's performance can be improved by caching and optimizing database queries, and its extensive community and rich ecosystem make it still important in today's technology stack.

In PHP, weak references are implemented through the WeakReference class and will not prevent the garbage collector from reclaiming objects. Weak references are suitable for scenarios such as caching systems and event listeners. It should be noted that it cannot guarantee the survival of objects and that garbage collection may be delayed.

The \_\_invoke method allows objects to be called like functions. 1. Define the \_\_invoke method so that the object can be called. 2. When using the $obj(...) syntax, PHP will execute the \_\_invoke method. 3. Suitable for scenarios such as logging and calculator, improving code flexibility and readability.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

SublimeText3 Mac version
God-level code editing software (SublimeText3)