php jsonpcallback,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服务端接受这个值看看什么样子!使用代码

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接收就可以啦!

于是代码:

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://blog.csdn.net/cyuyan112233/article/details/21318793

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值