做过web前端人都知道,经常会有ajax跨域问题,下面列举我经常使用的解决办法
第一种:使用jsonp,jQuery的ajax方法支持jsonp,但是最大的缺点就是只支持get方式,而且服务端也要修改
客户端 test.html代码
server.php代码
第二种:nginx反向代理,我的nginx版本nginx-1.10.0
首先在 conf\apiserver-reverse-proxy-conf\bingli\main.conf ,没有相关目录和文件就新建
重启nginx,之后ajax发请求到
http://localhost/uc/aa
http://localhost/uc/bb?token=xxxx
都会被转发到
http://192.168.10.111:8080/uc/aa
http://192.168.10.111:8080/uc/bb?token=xxxx
附上自己的bug修复方案
nginx
location /v2/wintelapi/api/agent/free {
16 #root /usr/work/tool/webroot/;
17 #rewrite ^/(.*)$ /_upload/index.php break;
18 proxy_set_header Host m.icsoc.net;
19 proxy_set_header X-Real-Ip $remote_addr;
20 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
21 proxy_pass http://182.92.31.130;
22 }
js
$('#btn_consultinner').click(function () { $.ajax({ //url: wincall.opts.wintelapi_url + '/v2/wintelapi/api/agent/free', url:'/v2/wintelapi/api/agent/free', data: {vcc_code: wincall.opts.vcc_code}, dataType: 'jsonp', timeout: 5000, async: false, jsonp: 'jsonpcallback', success: function (response) { var resCode = response.code || ''; if (resCode == 200) { var resData = response.data || {}; var $tbody = $('#tbody'); $.each(resData, function (index, value) { $tbody.empty(); if (value.ag_num != wincall.loginInfo.agentNum) { var $tr = $('<tr><td>' + value.ag_id + '</td><td>' + value.ag_num + '</td><td>' + value.ag_name + '</td><td>' + value.pho_num + '</td></tr>'); $tbody.append($tr); $tr.on('click', function () { wincall.fn_consultinner(value.ag_id); $('#free-agent-modal').modal('hide'); }); } }); } else { wincall.log(response); } } }); $('#free-agent-modal').modal({}); });