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