ajax请求的问题(Cordova)

时间:2015-10-13 15:18:19

标签: javascript jquery ajax cordova

我的cordova应用程序中的传出请求存在一些问题。 既不是ajax请求正在工作,也不能包含这样的图像:<img src="http://www.bing.com/s/a/hpc14.png">

config.xml中:

<plugin name="cordova-plugin-whitelist" version="1" />

<access origin="*" />

<allow-navigation href="*" />
<allow-intent href="*" />

<content src="index.html" />

app.js:

$.ajax({
    url: "http://domain.xyz",
    type: "post",
    data: { "uuid": device.uuid },
    dataType: "json",
    success: function(json){
        alert('it works');
    },
    error: function(e){
        alert("status: "+e.status);
    }
});

这总是返回status: 0

你可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

如果您使用的是Cordova 5,并且设备和服务器可以互相看到对方,则可能需要使用内容安全策略启用此功能。见Cordova Whitelist Plugin。您想考虑向

添加元标记

示例配置如下:

<table class="some-table">
    <tr>
         <td valign="top">
           <h3>Headline 1</h3>
         </td>
         <td valign="top">
           <h3>Headline 2</h3>
         </td>
         <td valign="top">
           <h3>Headline 3, Maybe On 2 Lines</h3>
         </td>          
    </tr>
    <tr>
         <td valign="top">                 
             <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor</p>          </td>
         <td valign="top">                 
             <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
         </td>
         <td valign="top">                 
             <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
         </td>
    </tr>
</table>

根据您的应用程序执行或未执行的操作,您可能不需要上面的所有其他选项,尽管某些Ajax和模板框架会。以上适用于使用JQuery和Handlebars的Cordova 5应用程序。

此外,对于Xcode 7 / iOS 9,您需要调整ATS设置以允许连接到非https后端:

以下是您的应用信息.plist更改的实际示例:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

这是一个脚本,您可以将其用作iOS的预构建钩子来自动执行此操作:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

只需将#!/bin/bash echo "Adjusting plist for App Transport Security exception." val=$(/usr/libexec/plistbuddy -c "add NSAppTransportSecurity:NSAllowsArbitraryLoads bool true" platforms/ios/PROJECTNAME/PROJECTNAME-Info.plist 2>/dev/null) echo "Done" 替换为项目名称。

答案 1 :(得分:0)

@moerphy,
前面的答案都是正确的。使用新安全策略设置三(3)个项目。但是,如果您将版本设置为低于4.0.0,那么您不必担心安全策略。三(3)项是:

  • white-list
  • white-list plugin
  • CSP

另外,我希望你的榜样就是这样。将APP资产(图像,css文件等)存储在删除服务器上是不好的做法。存储您可以在本地使用的所有资产。

无论如何,你想阅读。 Top Mistakes by Developers new to Cordova/Phonegap
请务必阅读:

    1. 未设置&#34; phonegap版本&#34;为您的编译器
    1. 不添加新的&#34;白名单&#34;,&#34;白名单插件&#34; config.xml和&#34;内容安全策略&#34;
    2. 中的参数
    1. 您需要立即从NPM获取插件。

我引用 6。所以我可以鼓励你看看:

  

使用CLI版本,如果您没有为您的平台分配版本,或者在&#39;&#39; Phonegap Build&#39;&#39;如果你没有在config.xml中设置phonegap-version,你将获得最新版本。如果运气好,您的程序就会按预期运行。如果你不幸运,你会得到一组级联错误。