记录下Cordova ajax http请求的折腾纪录
尝试Cordova 也就是phonegap 做App ,尝试http 请求。遇到请求失败的几处需要注意修改的地方。
- Cordova 自带的demo的meta标记限制了行内javascript和http请求的域名范围。如下改为无限制。
-
config.xml 需要设置为 <access origin="*" /> 或者自己的服务器域名
-
xcode 更新了网络请求的安全限制,默认强制要求https了。解决办法是在 plist 文件里添加自定义的配置。
NSAppTransportSecurity NSAllowsArbitraryLoads
demo 代码
Hello World Apache Cordova
Connecting to Device
Device is Ready
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */var app = { // Application Constructor initialize: function() { this.bindEvents(); }, // Bind Event Listeners // // Bind any events that are required on startup. Common events are: // 'load', 'deviceready', 'offline', and 'online'. bindEvents: function() { document.addEventListener('deviceready', this.onDeviceReady, false); }, // deviceready Event Handler // // The scope of 'this' is the event. In order to call the 'receivedEvent' // function, we must explicitly call 'app.receivedEvent(...);' onDeviceReady: function() { app.receivedEvent('deviceready'); }, // Update DOM on a Received Event receivedEvent: function(id) { var parentElement = document.getElementById(id); var listeningElement = parentElement.querySelector('.listening'); var receivedElement = parentElement.querySelector('.received'); listeningElement.setAttribute('style', 'display:none;'); receivedElement.setAttribute('style', 'display:block;'); console.log('Received Event: ' + id); }};app.initialize();document.addEventListener("deviceready", onDeviceReady, false);function onDeviceReady() { //console.log(navigator.contacts); $('#url').val('test.html'); }function httpGet(){ var url = $('#url').val(); $.ajax({ type : "GET", url : url, crossDomain: true, //beforeSend : function() {$.mobile.loading('show')}, //complete : function() {$.mobile.loading('hide')}, //data : {username : 'subin', password : 'passwordx'}, dataType : 'text', success : function(response) { console.error(response); alert('Works!'); }, error : function() { //console.error("error"); alert('Not working!'); } });}