HTML页面代码:

<script type="text/javascript">

function UrlSearch(){
var name,value;
var str=location.href; //取得整个地址栏
var num=str.indexOf("?")
str=str.substr(num+1); //取得所有参数 stringvar.substr(start [, length ]
var arr=str.split("&"); //各个参数放到数组里
for(var i=0;i < arr.length;i++){
num=arr[i].indexOf("=");
if(num>0){
name=arr[i].substring(0,num);
value=arr[i].substr(num+1);
this[name]=value;
}
}
}

function jsonp(){

var Request=new UrlSearch(); //实例化

var goods_name = Request.name

$.ajax({
type: "GET",
async: false,
url:"http://test.com/jp4.php",
dataType: "jsonp",
data:{goods_name:goods_name},
jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(callback)
jsonpCallback:"call",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
success: function(jsons){

console.log(jsons)
if(jsons.status==1){
alert("goods_id:"+jsons.goods_id+";\n面料编号:"+jsons.goods_name+";\n描述是:"+jsons.keywords+';\n基本价格是:'+jsons.shop_price+"韩元")
}else if(jsons.status==0){
alert(jsons.data)
}
},
error: function(jsons){
//console.log(jsons)
alert(jsons.status+"\n路径错误")
}
});
}
window.onload=(jsonp());
</script>

PHP代码:

<?php
include_once "./radio_class.php";
$radio = new Radio();
$goods_name = $_GET["goods_name"];
//$goods_name = 'Mvbb4AeP';
if(empty($goods_name)){
$arr = array('data'=>'参数为空','status'=>0);
$results = json_encode($arr);
echo "call($results)";exit();
}
$table='ecs_goods';
$where=array('goods_name'=>$goods_name);
$fieldes=array('goods_id','goods_name','keywords','shop_price');
$arr = $radio->fileds_select($table,$where,$fieldes);
//print_r($arr);
echo $arr;
exit();

附:radio_class.php

<?php
header('content-type:text/html;charset=utf-8');
class Radio{
private $host;
private $port;
private $user;
private $pass;
private $dbname;
private $charset;
private $link;
private static $db;

public function __construct($arr=array()){
$this->host = isset($arr['host']) ? $arr['host'] : 'localhost';
$this->port = isset($arr['port']) ? $arr['port'] : '3306';
$this->user = isset($arr['user']) ? $arr['user'] : 'root';
$this->pass = isset($arr['pass']) ? $arr['pass'] : 'root';
$this->dbname = isset($arr['dbname']) ? $arr['dbname'] : 'newlibrary';
$this->charset = isset($arr['charset']) ? $arr['charset'] : 'utf8';
//连接数据库
$this->db_connect();
//选择数据库
$this->db_usedb();
//设置字符集
$this->db_charset();
}
public function __clone(){
trigger_error('克隆不被允许',E_USER_ERROR);
}
private function aaa(){
echo 'nihao1';die;
}
public function __call($action,$b){
var_dump($action);var_dump($b);die;
}
public static function getInstance($arr){
if(!self::$db){
self::$db = new Self($arr);
}
return self::$db;
}
//连接数据库
private function db_connect(){
$this->link=mysqli_connect($this->host.':'.$this->port , $this->user , $this->pass);
if(!$this->link){
echo "数据库连接失败 <br>";
echo "错误编码是".mysqli_errno().'<br>';
echo "错误原因是".mysqli_error().'<br>';
exit;
}
}
//选择数据库
private function db_usedb(){
mysqli_query($this->link,"use {$this->dbname}");
}
//设置字符集
private function db_charset(){
mysqli_query($this->link,"set names {$this->charset}");
}
/**
* 执行sql语句
* @param $sql
* @return source
**/
public function query($sql){
$res=mysqli_query($this->link,$sql);
if(!$res){
echo "SQL语句有错误 <br>";
echo "错误编码是".mysqli_errno($this->link).'<br>';
echo "错误原因是".mysqli_error($this->link).'<br>';
exit;
}
return $res;
}

/**
* 获取一条记录
* 前置条件 资源型
* @param $query
* @return array 二维
**/
public function getRowFromSourse($query,$type='assoc'){
if(!in_array($type, array('assoc','array','row'))){
die('转化错误');
}
$funcname="mysqli_fetch_".$type;
return $funcname($query);
}
/**
* 获取列表
* @param $sql
* @return array 二维
**/
public function getAll($sql){
$query=$this->query($sql);
$list=array();
$list = $this->getRowFromSourse($query);
/*while ($row=$this->getRowFromSourse($query)) {
$list[]=$row;
}*/
return $list;
}

/**
* 显示数据
* @param $table 表名
* @param $fieldes 字段名
* @param $where where条件
* @return array 二维数组
**/
public function fileds_select($table,$where=array(),$fieldes=array()){
$str='1=1';
$strs='';
if(is_array($where)){
foreach ($where as $key => $v) {
$str.=' and '.$key."='".$v."'";
}
}
if(is_array($fieldes)){
foreach ($fieldes as $key => $v) {
$strs.=','.$v;
}
$strs = substr($strs,1);
}

$sql="select $strs from $table where $str";

$result = $this->getAll($sql);
if(empty($result)){
$arr = array('data'=>'数据为空','status'=>0);
$result = json_encode($arr);
return "call($result)";
}
//return $result;die;
$result['status']=1;
$result = json_encode($result);
return "call($result)";

}
}

注:一定要在两个域名下测试哦

ajax实现jsonp跨域接口的更多相关文章

  1. 06: AJAX全套 & jsonp跨域AJAX

    目录: 1.1 AJAX介绍 1.2 jQuery AJAX(第一种) 1.3 原生ajax(第二种) 1.4 iframe“伪”AJAX(第三种) 1.5 jsonp跨域请求 1.6 在tornad ...

  2. jQuery ajax的jsonp跨域请求

    一直在听“跨域跨域”,但是什么是跨域呢?今天做了一些了解.(利用jQuery的jsonp) jQuery使用JSONP跨域 JSONP跨域是利用script脚本允许引用不同域下的js实现的,将回调方法 ...

  3. AJax与Jsonp跨域访问

    一.JavaScript的AJax AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML) 设计AJax使用的一种重要技术 ...

  4. ajax使用jsonp跨域调用webservice error错误信息"readyState":4,"status":200,"statusText":"success"

    主要还是接口写有问题 至于ajax保持简洁写法即可 $.ajax({ dataType: 'jsonp', type: ‘get’, data: {}, url: '' })

  5. ajax,jsonp跨域访问数据

    访问高德aip天气接口 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> & ...

  6. ajax之jsonp跨域请求

    前端ajax请求代码 后台php处理代码

  7. (三)ajax请求不同源之jsonp跨域

    凡是拥有"src"这个属性的标签都具有跨域的能力,比如<script>.<img>.<iframe>. JS中,我们直接用XMLHttpRequ ...

  8. jquery ajax怎么使用jsonp跨域访问

    在项目中使用接口的比较多,在客户端跨域访问,jquery中只能使用jquery ajax的jsonp方法. 值得注意的是,jQuery.ajax()只支持get方式的跨域,post的方式是不支持的.& ...

  9. 原生JS封装Ajax插件(同域&&jsonp跨域)

    抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...

随机推荐

  1. 01-C#入门(调试和错误处理)

    老实说,这一章没有什么要写的,很多都是实操性的东西. 调试方法 可以使用Debug.WriteLine().Trace.WriteLine()输入调试信息到窗体下的输出窗口,不过没怎么用过,比较有用的 ...

  2. BAE log服务的配置(nodejs)

    log4js.loadAppender('baev3-log'); var options = { 'user': appConfig.AK, //这里是在用户的安全认证中的Access Key ID ...

  3. Android Studio 修改字体

    修改字体(font)大小(size)   本文引用: http://blog.csdn.net/caroline_wendy/article/details/21876727   Android St ...

  4. C++注意

    断言assert是仅在Debug版本起作用的宏,它用于检查“不应该”发生的情况. 在函数的入口处,使用断言检查参数的有效性(合法性). 如果程序在assert处终止了,并不是说含有该assert的函数 ...

  5. Semaphore用法

    HANDLE hSemaphore; cout<<1<<endl; hSemaphore = CreateSemaphore( NULL, 0, 10000, NULL);   ...

  6. 通过rem编写自适应移动端要点

    直接上干货 1,dpr 苹果手机像素是2 普通安卓机是1 也就是说1像素下苹果需要的像素点是安卓机的两倍 所以一个需要15x15显示的图像安卓机仅需要提供15X15即可显示清楚 苹果手机需要要30X3 ...

  7. Linux CentOS6.8下解压安装mysql-5.7.14完整介绍

    环境:centos6.8 32位本教程安装MySQL是通过编译过的二进制文件进行安装.是不针对特定平台的通用安装方法,使用的二进制文件是后缀为.tar.gz的压缩文件1.下载 http://dev.m ...

  8. TENDA-F322路由器管理工具

    https://yunpan.cn/cYsfNxJLfVnUY (提取码:d0ae)

  9. linux arch目录下处理器体系架构介绍

    alpha 处理器Alpha 处理器最早由美国DEC 公司设计制造,在Compaq (康柏)公司收购DEC 之后,Alpha 处理器继续得到发展,并且应用于许多高档的Compaq 服务器上,HP (惠 ...

  10. linux 配置 tomcat 自动发布脚本

    首先将打包好的 war 包(举例 management-20160809-1.0.war),传到 tomcat 的 webapps 目录下,然后在 tomcat 目录下新建 deploy.sh 脚本. ...