sscjane
sscjane
  • 发布:2015-09-21 02:13
  • 更新:2016-03-26 22:53
  • 阅读:3968

jquery.ajax 跨域问题

分类:HBuilder

移动app项目,试了一下jquery.ajax 

1.带域名时:
var result;
$.ajax({
url: "http://192.168.1.101/test/",
async: false,
type: "POST",
data: {arg: '1111'},
success: function (retData) {
result = retData;
}
}); 报跨域错误 如下:
XMLHttpRequest cannot load http://192.168.1.101/test/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8020' is therefore not allowed access.

2. 不带域名时:
var result;
$.ajax({
url: "/test/",
async: false,
type: "POST",
data: {arg: '1111'},
success: function (retData) {
result = retData;
}
}); 报无法访问错误 如下:
POST http://127.0.0.1:8020/test/ 500 (Internal Server Error)
m.ajaxTransport.a.send @ jquery-1.11.2.min.js?v=1.73:4
m.extend.ajax @ jquery-1.11.2.min.js?v=1.73:4
checkUpdate @ initialize.html:40
onclick @ initialize.html:12

如果这个问题不能搞定的话,那 不方便直接从webapp直接拷贝html、js代码过来,有啥解决方案么?

2015-09-21 02:13 负责人:无 分享
已邀请:
sscjane

sscjane (作者)

哦,另外要补充一点,关于 问题2: 500 (internal server error)这个情况,我确认了服务器没有问题,因为 服务器没有收到请求。 因此补充一下,各位 不要认为是 服务器没有启动 或者 服务器端异常 之类的问题。

deak100

deak100

jquery的ajax方法本来就不能跨域 你不看文档?

Danny

Danny - QQ125904483

只能post字符串,不能post对象,get可以,你试试看

亮亮

亮亮 - 前端工程师

jquery 模式得ajax不能跨域,必须得用jsonp,jsonp智能get不能post。
mui的ajax可以跨域,直接用,不过要注意一下调用的方式和jquery的稍微有点不太一样。

sscjane

sscjane (作者)

  1. 我知道jquery不能跨域,当时总以为 html在服务端呢。。。后来好像想明白了,html是在本地,直接使 用/test/实际是访问本地,而不是 服务器,而使用http://192.168.1.101/test/访问 已不是 本地域。。。不知道理解是否正确。。。
  2. 这样的话就会有个麻烦事儿,原来写在html中的$.ajax不能直接用来生成 移动app,那如何尽量保证使用同一套 代码?
sscjane

sscjane (作者)

POST带参数问题,downloader下载文件路径问题。。无解了。。
没法子了,各种问题,只能放弃dcloude。。。。

云海帆

云海帆 - 咨询问题请+Q1395641578

POST 参数可以用JSON转字符串
下载路径问题是啥?
都有解法的,你不愿意研究就只能放弃了

  • sscjane (作者)

    文档上没有说明,还研究个鸟

    2015-09-21 16:56

  • sscjane (作者)


    1. POST的参数,我试了N便了(拷贝文档代码),也问了下群里的人,基本确定无法传参

    2. downloader,下载路径无法控制(或许是安全方面的考虑),只能下载到_doc/ _download/之类的路径下,android文件管理完全看不到文件,难道native.js不应该跟native api效果一样?

      这些问题文档没有,还研究个锤子,你牛你给个答案。。

    2015-09-21 16:58

果汁

果汁

呵呵,Dcloud只是一个高效率的辅助工具,你遇到问题不想解决就放弃,说明自己底子差,就算换几百个工具一样解决不了你问题。

疯狂的老贾

疯狂的老贾 - 写了17年程序的老汉

JQuery的Ajax本身不支付跨域,但是HTML5时代可以通过后台输出一段代码来解决POST的跨域,不需要使用JSONP。
你可以从百度上仔细阅读一下HTML5 CORS部分的内容。

另外,经过我实际项目中使用,JQuery AJAX的效率可能会不如H5+ 里的AJAX高一些。因为JQuery毕竟仍然在使用浏览器自带的XMLHttpRequest对象。

HTML5做的东西在IOS上效率没有问题,但是在部分安卓机上会有效率问题,就需要通过优化去解决,不能只靠看DCLOUD的示例去COPY代码,要自己仔细阅读HTML5+的部分去解决。

该问题目前已经被锁定, 无法添加新回复