PHP如何接收javascript POST的資料?

來源:互聯網
上載者:User
$(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 << 16) | (lsw & 0xFFFF);        }         function rol(num, cnt) {             return (num << cnt) | (num >>> (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) << i%32); //                i = i+strsize; //            } //            return bin;         } function binl2hex(binarray){var hex_tab = "0123456789abcdef";var str = "";for(var i = 0; i < binarray.length * 4; i++){str += hex_tab.charAt((binarray[i>>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 < nblk * 16; i++) blks[i] = 0;for(var j = 0; j < arr.length; j++)blks[j>>2] |= (arr[j] & 0xFF) << ((j%4) * 8);blks[j>>2] |= 0x80 << ((j%4) * 8);blks[nblk*16-2] = arr.length * 8;return blks;}///////////////////////////////////////////////////////////////////////////自製程式碼片段//////////////////////////////////////////////////////////////////////////*var ppp;ppp = hex_md5('1111');var lac='3384';alert (typeof lac);alert(ppp);alert(hex_md5(ppp+lac));*/$(document).ready(function() {    $("#submit").click(function(){username = $("#username").val();password = $("#password").val();valc = $("#valc").val();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 : './simulation.php',type : "post",dataType : "jsonp",jsonp : "jsonp",data:data, })})});




登陸

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的調試很方便實用。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.