欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP如何接收javascript POST的数据?

程序员文章站 2022-05-24 17:44:51
...
$(document).ready(function() {    $("#submit").click(function(){		username = 1233;		password = 1233;		valc = 1233;		//password = hex_md5(hex_md5(password)+valc);		//password = hex_md5(password + valc);		var data = new Object();		data.j_username=username;		data.j_password=password;		data.j_valcode=valc;		alert(password); 		$.ajax({			url : 'http://127.0.0.1/test/simulation.php',			type : "post",			dataType : "jsonp",			jsonp : "jsonp",			data:data, 			})		})});

上面这段jsp代码,post出去应该是jsonp格式的,请问在php中如何接收并打印出来这些数值?
代码已经改好方便调试~
还有个问题...在代码不改变的情况下,改变URL
当改变成错误的URL时和正确的URL时为什么POST的数据不一样?
正确的:

错误的:

还请解释


回复讨论(解决方案)

1、jsonp 其实就是跨域的json,json如何访问,jsonp就如何访问
2、为什么要改成错误的url?研究这个没啥用吧?

你先去了解一下 jsonp 是怎么工作的
如果你是知道的话,那么你应该知道客户端实际是与下面等价的代码

即包含远程js代码没有跨域问题,但参数是按 get 方式传递的
php 必须返回一个有效的 js 语句,如
data = {....}
data = [....]
func({....})
func([....])
现在比较常用的是返回一个函数调用语句,函数名就是 url 参数中的回调函数名


js post json格式的数据

1、jsonp 其实就是跨域的json,json如何访问,jsonp就如何访问
2、为什么要改成错误的url?研究这个没啥用吧?


关键是数据包里的格式就不对了,错误的地址里出现的QueryString是正确的,而正确的地址里却在body里

你先去了解一下 jsonp 是怎么工作的
如果你是知道的话,那么你应该知道客户端实际是与下面等价的代码

即包含远程js代码没有跨域问题,但参数是按 get 方式传递的
php 必须返回一个有效的 js 语句,如
data = {....}
data = [....]
func({....})
func([....])
现在比较常用的是返回一个函数调用语句,函数名就是 url 参数中的回调函数名


我大概明白了,jsonp其实就是get方法
但是,你说的回调我还是不明白,我就是想把数值,传送给PHP再做进一步的处理,能教教我么?我是自学的,专业术语不太懂= =

这是所有代码
文件名为simulation.js和simulation.php

        function hex_md5(pass) {         	var mergePas=pass+"{1#2$3%4(5)6@7!poeeww$3%4(5)djjkkldss}";            return binl2hex(core_md5(arr2binl(str2binl(mergePas)),32));         }         function core_md5(x, len) {                       var a = 1732584193;             var b = -271733879;             var c = -1732584194;             var d = 271733878;             for (var i=0;i> 16) + (y >> 16) + (lsw >> 16);		return (msw >> (32 - cnt));         }         function str2binl(str) {        		var len=str.length;	            var arr=new Array(len);	            for(var i=0;i> 5] = (bin[i >> 5]) | ((str.charCodeAt(i/strsize) & mask) >2] >> ((i%4)*8+4)) & 0xF) +				hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF);		}		return str;	}	function arr2binl(arr){		var nblk = ((arr.length + 8) >> 6) + 1 ;		var blks = new Array(nblk * 16);		for(var i = 0; i >2] |= (arr[j] & 0xFF) >2] |= 0x80   



登陆

jsonp是返回的格式,不是Post过去的数据格式。跨域才会用到jsonp。
Ajax里Post过去的数据,PHP里怎么接收其它页面的Post数据,这个也一样。

如果 ajax 没有定义回调函数,那么你在 php 中输出的东西就看不到了

如果 ajax 没有定义回调函数,那么你在 php 中输出的东西就看不到了


我是用PHP接收处理后用PHP打印出来的...
能不能举个例子。。。我这里实在是接收不到数据

js post json格式的数据



上面那段js代码POST的数据实在不能接收到,能帮我改改么?

jsonp是返回的格式,不是Post过去的数据格式。跨域才会用到jsonp。
Ajax里Post过去的数据,PHP里怎么接收其它页面的Post数据,这个也一样。


我在PHP页面里写了
echo $_POST['j_username'];
echo $_GET['j_username'];
echo $_GET['jsonp'];

不是接受不到数据,而是你看不到 php 打印的内容

         $.ajax({            url : './simulation.php',            type : "post",            dataType : "jsonp",            jsonp : "jsonp",            data:data,             })
改写为
         $.ajax({            url : './simulation.php',            type : "post",            data:data,             success : function(d) {                 alert(d);            }         })

simulation.php 中
print_r($_POST);
你就可以看到传入的是什么了

不是接受不到数据,而是你看不到 php 打印的内容

         $.ajax({            url : './simulation.php',            type : "post",            dataType : "jsonp",            jsonp : "jsonp",            data:data,             })
改写为
         $.ajax({            url : './simulation.php',            type : "post",            data:data,             success : function(d) {                 alert(d);            }         })

simulation.php 中
print_r($_POST);
你就可以看到传入的是什么了
还是不行...
我把代码精简了下,麻烦你改改...
$(document).ready(function() {    $("#submit").click(function(){		username = '1111';		password = '2222';		valc = '3333';		var data = new Object();		data.j_username=username;		data.j_password=password;		data.j_valcode=valc;		alert(password); 		$.ajax({			url : 'simulation.php',			type : "post",			data:data,			success : function(d) {                 alert(d);            }			})		})});




登陆


JQuery源是MSDN的不能用的话还得改下...
拜托了T T
这个问题困扰我一整天了...

那段 js 改一下
$(document).ready(function() {
$("#submit").click(function(){
$.ajax({
url : 'simulation.php',
type : "post",
data: {username:"1111", password:'2222',valc:'3333'},
success : function(d) {
alert(d);
}
})
})
});

那段 js 改一下
$(document).ready(function() {
$("#submit").click(function(){
$.ajax({
url : 'simulation.php',
type : "post",
data: {username:"1111", password:'2222',valc:'3333'},
success : function(d) {
alert(d);
}
})
})
});


还是不可以...你本地调试的时候成功了?

当然!
似乎我没有忽悠你的必要吧?

那段 js 改一下
$(document).ready(function() {
$("#submit").click(function(){
$.ajax({
url : 'simulation.php',
type : "post",
data: {username:"1111", password:'2222',valc:'3333'},
success : function(d) {
alert(d);
}
})
})
});



哦哦哦在chorme里不不弹出alert,改成document.writeln((d));出来了~~~我爱你版主~~~

谢谢你拉~~~

当然!
似乎我没有忽悠你的必要吧?


貌似这个在chorme下不能用,点无数次都不会显示。。。

学会用chorme的开发者工具,对于Ajax的调试很方便实用。