日期:2014-05-16  浏览次数:20328 次

php jquery jsonp 跨域访问,jsoncallback无返回?!!!,无解了,为什么没返回,没返回!原来是是这个jsoncallback的问题

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
 }
?>
到此