热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用PhoneGap和jQuery的跨域请求不起作用-Cross-domainrequestsusingPhoneGapandjQuerydoesn'twork

ImcreatingaPhoneGapappforAndroid.Togetdatafromthe(remote)serverImakeaRESTcallusi

I'm creating a PhoneGap app for Android. To get data from the (remote) server I make a REST call using jQuery's $.ajax() function. There are a few things you must know:

我正在为Android开发一个PhoneGap应用。要从(远程)服务器获取数据,我使用jQuery的$.ajax()函数进行REST调用。有几件事你必须知道:

  • Type of the call must be POST
  • 调用类型必须是POST
  • The server expects JSON data(at least username and password)
  • 服务器需要JSON数据(至少是用户名和密码)
  • The server sends back JSON data
  • 服务器返回JSON数据

The code:

代码:

function makeCall(){
    var url = "http://remote/server/rest/call";

    var jsOnData='{"username":"'+$('#username').val()+'","password":"'+$('#password').val()+'"}';

    $.ajax({
            headers: {"Content-Type":"application/json; charset=UTF-8"},
            type: "POST",
            url: url,
            data: jsonData,
            dataType: "json",
            success: succesFunction,
            error: errorFunction
    });
}

But, this doesn't work. When I use Firebug to see the servers response, there is nothing. With TcpTrace I can see the headers of the request. Instead of an expected POST method, there is an OPTIONS method, with some strange headers added.

但是,这是行不通的。当我使用Firebug查看服务器响应时,什么都没有。通过TcpTrace,我可以看到请求的头部。这里有一个选项方法,添加了一些奇怪的标题,而不是预期的POST方法。

OPTIONS /remote/server/rest/call HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: null
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache

I know it has something to do with doing cross-domain requests, but I don't know how to solve the problem. I tried a few things to fix it, but with no result:

我知道这与跨域请求有关,但我不知道如何解决这个问题。我尝试了一些方法来修复它,但是没有结果:

  • Use 'jsonp' in stead of 'json'
  • 使用“jsonp”而不是“json”
  • Try to use Cross-Origin Resource Sharing (CORS)
  • 尝试使用跨源资源共享(CORS)

The problem has also something to do with same origin policy, but this does not apply to the file:// protocol PhoneGap is using to load a local html file.

问题还与同源策略有关,但这并不适用于加载本地html文件的// / PhoneGap协议。

In my AndroidManifest.xml file, the option

在我的AndroidManifest。xml文件的选项


is set.

是集。

I'm trying to fix this for 2 days now, but no result till now. Is this even possible to do? Do you have any tips for me so I can move on?

我想把这个问题解决两天,但是到现在还没有结果。这可能吗?你有什么建议给我,这样我就可以继续了吗?

Thanks in advance!

提前谢谢!

5 个解决方案

#1


10  

you need to whitelist your external domains. just go to your phonegap / cordova plist file in xcode and add a new entry, have it's value be * and you can access any website out there.

您需要对外部域进行白名单。在xcode中使用phonegap / cordova plist文件,添加一个新条目,它的值是*,你可以访问任何网站。

also know that this WILL NOT WORK IN A BROWSER. Browsers have crossdomain issues, not phonegap or mobile devices.

还要知道,这在浏览器中是行不通的。浏览器有跨域问题,而不是phonegap或移动设备。

#2


8  

I solved the problem by myself. The problem is located in the url, where I have to add a domain. I changed

我自己解决了这个问题。问题位于url中,我需要添加一个域。我改变了

var url = "http://remote/server/rest/call";

var url = " http://remote/server/rest/call ";

to

var url = "http://remote.mydomain.com/server/rest/call";

var url = " http://remote.mydomain.com/server/rest/call ";

and it works!

和它的工作原理!

I assumed the first url should work because it works on an iphone app with exact the same url and settings. It has also something to do with a double firewall(Windows and ESET firewall) where I shut down the Windows firewall.

我假设第一个url应该是可以工作的,因为它可以在一个iphone应用程序上使用相同的url和设置。它还与我关闭Windows防火墙的双防火墙(Windows和ESET防火墙)有关。

Anyway, thanks for your answers!

不管怎样,谢谢你的回答!

#3


3  

Adding this to the config.xml saved me

将其添加到配置中。xml救了我





I was baffled as to why any outside resource did not load, even google maps and my remote debugging tool. This saved me!

我很困惑为什么任何外部资源都不加载,甚至谷歌映射和我的远程调试工具。这救了我!

#4


1  

JQuery setting :$.support.cors = true;

JQuery设置:.support美元。歌珥= true;

#5


0  

Try setting dataType:jsonp and set crossDomain:true For cross domain ajax requests you can use jsonp. http://api.jquery.com/jQuery.ajax/

尝试设置dataType:jsonp并设置crossDomain:true用于跨域ajax请求,您可以使用jsonp。http://api.jquery.com/jQuery.ajax/

Or you can append callback=? to your url.

或者可以追加callback=?你的url。


推荐阅读
  • 本文探讨了浏览器的同源策略限制及其对 AJAX 请求的影响,并详细介绍了如何在 Spring Boot 应用中优雅地处理跨域请求,特别是当请求包含自定义 Headers 时的解决方案。 ... [详细]
  • AJAX技术允许网页在不重新加载整个页面的情况下进行异步更新,通过向服务器发送请求并接收JSON格式的数据,实现局部内容的动态刷新。 ... [详细]
  • 本文探讨了如何在Node.js环境中,通过Tor网络使用的SOCKS5代理执行HTTP请求。文中不仅提供了基础的实现方法,还介绍了几种常用的库和工具,帮助开发者解决遇到的问题。 ... [详细]
  • 本文档详细介绍了Scrapy框架中的信号系统,包括如何利用信号来增强爬虫的功能性和灵活性,以及各个内置信号的具体用途和参数。 ... [详细]
  • 本文探讨了如何在JavaScript中动态地引用由PHP生成的变量,特别是在循环中变量名随迭代变化的情况。通过示例代码展示了实现这一功能的具体步骤。 ... [详细]
  • 本文详细探讨了JavaScript中的闭包与柯里化技术,这两者是函数式编程的重要组成部分,对提升代码的灵活性和可维护性具有重要作用。 ... [详细]
  • C# 对象转 JSON 字符串的方法与应用
    本文介绍如何在 C# 中使用一般处理程序(ASHX)将对象转换为 JSON 字符串,并通过设置响应类型为 application/json 来确保客户端能够正确解析返回的数据。同时,文章还提供了 HTML 页面中不依赖 jQuery 的 AJAX 方法来接收和处理这些 JSON 数据的具体实现。 ... [详细]
  • 深入解析Axios与jQuery的核心差异
    本文详细对比了Axios与jQuery在Web前端开发中的应用,探讨两者在异步请求处理、数据封装及请求方式上的不同之处。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 深入解析ES6至ES8的新特性与应用
    本文详细介绍了自2015年发布的ECMAScript 6.0(简称ES6)以来,JavaScript语言的多项重要更新,旨在帮助开发者更好地理解和利用这些新特性进行复杂应用的开发。 ... [详细]
  • 探讨在 Vue 框架中遇到的数据更新延迟或失败的问题,并提供解决方案。 ... [详细]
  • PHP 实现数据库数据处理并实时更新客户端状态
    本文介绍了使用 PHP 处理数据库中的数据,并在每次处理后实时向客户端反馈当前状态的方法。适合需要监控数据处理进度的应用场景。 ... [详细]
  • 微信小程序中实现位置获取的全面指南
    本文详细介绍了如何在微信小程序中实现地理位置的获取,包括通过微信官方API和腾讯地图API两种方式。文中不仅涵盖了必要的准备工作,如申请开发者密钥、下载并配置SDK等,还提供了处理用户授权及位置信息获取的具体代码示例。 ... [详细]
  • Microsoft即将发布WPF/E的CTP(Community Technology Preview)和SDK,标志着RIA(Rich Internet Application)技术的新里程碑。更多详情及下载链接请参见MSDN官方页面。 ... [详细]
author-avatar
HVV_Ha8m
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有