html5 最近使用 hbuilder 来做移动端的混合应用的 app 也就是现在比较获得 html5 hybird app 使用 nativejs 可以调用原生的许多 api,比如说 弹窗窗口 警告框 原生用户提示 toast 日历组件 等等 现在我们来看看遇到的问题,由于我实在本地测试的所以本地的地址也是类似 http://localhost http://127.0.0.1这种的 首先我们来看看客户端代码怎么写(假设使用的是 runtime+项目 现在我们来调用 plus 下面的 XMLHTTPREQUEST) 首先需要保证下面两项是 1.确保手机网络畅通,能访问服务器地址(可用手机浏览器打开请求的网址) 2.确保提交的数据内容格式(XMLHttpRequest 默认提交的 content-type 为“text/plain;charset=UTF-8”)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

mui.ajax('http://server-name/login.php',{
data:{
username:'username',
password:'password'
},
dataType:'json',//服务器返回json格式数据
type:'post',//HTTP请求类型
timeout:10000,//超时时间设置为10秒;
headers:{'Content-Type':'application/json'},
success:function(data){
//服务器返回响应,根据响应结果,分析是否登录成功;
...
},
error:function(xhr,type,errorThrown){
//异常处理;
console.log(type);
}
});

然后服务器端代码(节选了部分做个参考):

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 返回给Ajax使用或者当做移动端的api来进行使用
* @param [type] $data [description]
* @return [type] [description]
*/
function echoJson($data){
if(intval(I('post.ajax',0))){
//允许跨域访问当上线以后就不能允许了这个后面会注释掉
header("Access-Control-Allow-Origin: *");
echo json_encode($data);
die();
}
}

服务器端需要在头信息中写入允许跨域:

1
header("Access-Control-Allow-Origin: *");