php jquery jsonp 跨域訪問,jsoncallback無返回?!!!,無解了,為什麼沒返回,沒返回!原來是是這個jsoncallback的問題

來源:互聯網
上載者:User

php jquery jsonp 跨域訪問,jsoncallback無返回?!!!,無解了,為什麼沒返回,沒返回!原來是是這個jsoncallback的問題
以前寫過跨域訪問,代碼不知道丟哪裡了,大早上8點多寫代碼,跨域,,,,,跨,,,,還沒跨呢!就沒返回了!我暈了,,,,,懵了,,,,,,
這不就是發一個jsoncallback的事情嘛!返回也不就是百度資料上面寫返回jsoncallback的事情嘛!  ,,,,,這麼簡單的事情,,,,怎麼行不通??!!!
發愣半天,,,,呆了!,,,,,還是不行!沒返回!
先看看我的錯誤碼!
html代碼ajax相關的部分代碼
$.getJSON("http://192.168.5.61/t1/fanyi_ro/dbv0_1/user/test_ajax/t3_ajax.php?jsoncallback=?",function(json){
  alert(json.fpas_answ_chk__1);
        $("#fpas_answ_chk__1").html(json.fpas_answ_chk__1);//ok,err,pic
      $("#fpas_answ_chk__2").html(json.fpas_answ_chk__2);//string read
      $("#fpas_answ_chk__3").html(json.fpas_answ_chk__3);//status ok,err
});
上面的這部分不就是發送的嘛!簡單,可是沒返回!碉堡了!!!!無解,看看錯誤的傳回碼
php的測試部分傳回碼(下面這個是錯誤的寫法,算是我的問題)
echo "jsoncallback(".json_encode(array("fpas_answ_chk__1"=>"test11","fpas_answ_chk__2"=>"test22","fpas_answ_chk__3"=>"test33")).")";
如果直接顯示是:
jsoncallback({"fpas_answ_chk__1":"test11","fpas_answ_chk__2":"test22","fpas_answ_chk__3":"test33"})
上面php直接輸出的格式!
問題來了!

怎麼都不能把這個php的返回資料返回到htm上面!

於是找了前輩們的文章,一個個翻閱,於是發現,問題還是在 jsoncallback 上面!

其實原理很簡單

驗證碼大家都應該知道的,就是驗證碼產生的同時有一個,圖片和一個變數也可以是session儲存,不管怎麼樣,下一步客戶看到的情況下,圖片要和變數對應的上!那麼這個驗證碼才是正確的驗證碼!

這個jsoncallback
其實也就是這個原理,只不過用js封裝了下代碼,這原理搞明白了,就好辦了!看jsoncallback 的值
html發送一個jsoncallback的值,這個值用的是傳值,也就是我們常說的get方式發送,那麼好辦了
html代碼ajax相關的部分代碼
$.getJSON("http://192.168.5.61/t1/fanyi_ro/dbv0_1/user/test_ajax/t3_ajax.php?jsoncallback=?",function(json){
  alert(json.fpas_answ_chk__1);
        $("#fpas_answ_chk__1").html(json.fpas_answ_chk__1);//ok,err,pic
      $("#fpas_answ_chk__2").html(json.fpas_answ_chk__2);//string read
      $("#fpas_answ_chk__3").html(json.fpas_answ_chk__3);//status ok,err
});

php服務端接受這個值看看什麼樣子!使用代碼
<?php
if(isset($_GET["jsoncallback"])){
 echo $_GET["jsoncallback"]."(".json_encode(array("fpas_answ_chk__1"=>"test11","fpas_answ_chk__2"=>"test22","fpas_answ_chk__3"=>"test33")).")";
 //TEST WRITE FILE
 $fp1=fopen("tmp1.txt","wb");
 fwrite($fp1,$_GET["jsoncallback"]."\n");
 fclose($fp1);
 //TEST WRITE FILE
 }
?>
由於是A頁面調用B頁面,無法直接顯示B頁面的內容,那麼我就採取了折中的方法,讓B頁面寫入到一個檔案,有同志們提議我可以把返回的值通過htm的擷取htm方式載入到一個#id地區,其實這個是測試代碼,活用吧,能輸出就成,我就用檔案輸出,這個更直觀易懂! A訪問B,讓B把GET的資料寫入到一個臨時檔案,開啟看看內容!
格式如下
jQuery18307850468485611238_1394932826491
這回明白了,原來呀:這個jsoncallback 其實發過去的不是jsoncallback 而是 jQuery18307850468485611238_1394932826491
所以返回當然要用 jQuery18307850468485611238_1394932826491 開頭的返回才能讓 jsoncallback的html正確接受,這個就是驗證碼類似的原理,A頁面=X B頁面返回X的資料,好了,我們只要擷取jsoncallback 的值,然後照葫蘆畫瓢返回資料讓html接收就可以啦!
於是代碼:
<?php
if(isset($_GET["jsoncallback"])){
 echo $_GET["jsoncallback"]."(".json_encode(array("fpas_answ_chk__1"=>"test11","fpas_answ_chk__2"=>"test22","fpas_answ_chk__3"=>"test33")).")";
 //TEST WRITE FILE
 $fp1=fopen("tmp1.txt","wb");
 fwrite($fp1,$_GET["jsoncallback"]."\n");
 fclose($fp1);
 //TEST WRITE FILE
 }
?>
到此問題解決,,,,今天沒冷汗,剛起來倒是懵了,,,,然後呆了一陣子,手無寸鐵的感覺,後來解決了,,,,還是學什麼都要看看原理,這樣可以從根解決問題。

下面的參考資料是無數文章中的其中的一篇,這個是白話寫的,並不是專業詞語,所以適合初級的看看實現的原理,我是初學者,看了前輩用大白話說jsoncallback的原理傳值,就突然領悟了一個新技能jsoncallback,哈哈

先普及下知識了,前輩們的其中一篇原理的文章,看明白其實就好寫了
http://www.cnblogs.com/5201314/archive/2009/06/23/1509552.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.