GVKun编程网logo

Phonegap跨域AJAX POST请求在Android上不起作用(安卓跨域请求)

17

最近很多小伙伴都在问Phonegap跨域AJAXPOST请求在Android上不起作用和安卓跨域请求这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展ajax–在iPhone和And

最近很多小伙伴都在问Phonegap跨域AJAX POST请求在Android上不起作用安卓跨域请求这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展ajax – 在iPhone和Android上使用Session变量和带有Phonegap的cookie、AJAX呼叫在Phonegap中不起作用,但正常工作、Ajax在android webview中不起作用、Android 2.3和Phonegap,navigator.online不起作用等相关知识,下面开始了哦!

本文目录一览:

Phonegap跨域AJAX POST请求在Android上不起作用(安卓跨域请求)

Phonegap跨域AJAX POST请求在Android上不起作用(安卓跨域请求)

跨域AJAX POST请求在Web浏览器(包括手机上的浏览器)上可以很好地工作,但不适用于使用以下工具构建的本机应用程序 Phonegap

我创建了一个登录表单,用户必须输入他们的登录凭据,然后由heroku上托管的服务器对其进行验证,{"success":true}如果输入了有效的凭据,则返回json

我的Ajax脚本:

$.ajax({   type: "POST",   url: "http://domain.com/public/auth/app-login",   contentType: "application/x-www-form-urlencoded; charset=utf-8",   dataType: "json",   data: {identity: <username from form>, password: <password from form>},   crossDomain: true,   cache: false,   success: function(data) {       obj = JSON.parse(data);       if (obj && obj.success === true) {          window.location.href = ''home.html'';       }   },   error: function(e) {       alert(''Error: '' + e.message);   }});

解决此问题所采取的步骤:

  • 域白名单 -config.xml

<access origin="http://domain.com/public/auth/app-login" />

<access origin="*" />

  • 告诉jQuery允许跨域

$.support.cors = true; 要么 jQuery.support.cors = true;

  • 禁用缓存 cache: false

任何帮助表示赞赏。

答案1

小编典典

好。如果index.html位于本地,则可以调用ajax任何主机,而无需在客户端或服务器中启用CORS。您删除:

$.support.cors = true; OR jQuery.support.cors = true;

和:

<access origin="http://domain.com/public/auth/app-login" />

它多余,只能使用:

<access origin="*" />

您需要检查并添加AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />

如果您的应用需要添加更多权限。最后,在$(document).ready()内部调用ajax:

$.ajax({   type: "POST",   url: "http://domain.com/public/auth/app-login",   dataType: "json",   data: {identity: <username from form>, password: <password from form>},   success: function(data) {     obj = JSON.parse(data);     if (obj && obj.success === true) {        window.location.href = ''home.html'';     }   },   error: function(e) {     alert(''Error: '' + e.message);   }});

ajax – 在iPhone和Android上使用Session变量和带有Phonegap的cookie

ajax – 在iPhone和Android上使用Session变量和带有Phonegap的cookie

我在使用来自Phonegap应用程序的ajax调用启动的 PHP服务器端代码中使用 PHP会话变量(例如$_SESSION [‘username’])时遇到了问题.

在研究这个问题时,我发现了关于是否可以使用会话变量和cookie的相互矛盾的建议.

有没有人有明确的答案?

如果可以使用会话变量和cookie,那么在使用它们时我应该注意哪些问题可能导致它们无法正常工作?

我知道可以为iPhone上的Phonegap应用程序启用cookie,但据我所知不适用于Android.

解决方法

您最好通过JSON将通常存储在会话变量中的数据传递到PhoneGap应用程序并让应用程序以这种方式存储它.

可以把它想象成使用外部API.该应用程序将进行身份验证并获取令牌.它将存储该令牌并使用它来验证对服务器的进一步请求是否经过身份验证.

AJAX呼叫在Phonegap中不起作用,但正常工作

AJAX呼叫在Phonegap中不起作用,但正常工作

我正在使用开放式天气地图api网络服务进行ajax调用,以便使用纬度和经度获取当前天气,问题是同一调用在我的常规php文件夹中有效,但在我的phongap应用程序中不起作用。我的ajax调用如下所示

$.ajax({        type : "GET",    dataType: "jsonp",        url  : "http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139",    }).done( function(msg){     var response = JSON.stringify(msg);     var parsedResponse = JSON.parse(response);     alert(parsedResponse.main.temp_min);    });});

我没有dataType: "jsonp"尝试将其更改为,"json"但没有任何效果。请帮助我,因为我目前对此仍然感到困惑。

答案1

小编典典

您是否已将config.xml中的网址列入白名单?

<access origin="http://api.openweathermap.org" />

了解更多:http
:
//docs.phonegap.com/en/3.0.0/guide_appdev_whitelist_index.md.html#Domain%20Whitelist%20Guide

Ajax在android webview中不起作用

Ajax在android webview中不起作用

我正在webview中加载一个网站,我们在网站上使用了Ajax,它在网页浏览器和移动浏览器上也运行良好,但在android webview中ajax无法正常工作,控制台中没有错误.这是我的代码: –

public class Activity_WebView extends AppCompatActivity implements  
 ConnectivityReceiver.ConnectivityReceiverListener {
WebView webview;
ProgressDialog pro_dialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web_view);

    webview = (WebView) findViewById(R.id.webview);
    webview.getSettings().setPluginState(WebSettings.PluginState.ON);
    webview.setWebViewClient(new loadinsame());
    pro_dialog = new ProgressDialog(Activity_WebView.this);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setDomStorageEnabled(true);
    webview.getSettings().setAllowUniversalAccessFromFileURLs(true);

    boolean connection = checkConnection();
    if (connection) {
        webview.loadUrl("website url");
    } else {
        Toast.makeText(Activity_WebView.this, "Sorry! Not connected to 
       internet", Toast.LENGTH_SHORT).show();
        dialog_Show(webview, "Please check you Inernet connect and Reload.", 
        false);
    }
}

@Override
public void onNetworkConnectionChanged(boolean isConnected) {
    if (!isConnected) {
        Toast.makeText(Activity_WebView.this, "Sorry! Not connected to 
        internet", Toast.LENGTH_SHORT).show();
    }
}

private class loadinsame extends WebViewClient {

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        pro_dialog.setCancelable(false);
        pro_dialog.setMessage("Loading...");
        pro_dialog.show();
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
        return true;
    }
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        pro_dialog.dismiss();

    }

    @Override
    public void onReceivedError(final WebView webview, WebResourceRequest 
    request, WebResourceError error) {
        super.onReceivedError(webview, request, error);
        pro_dialog.dismiss();
       // dialog_Show(webview, "Error Occur, Do you want to Reload?", true);

    }
}

@Override
public void onBackpressed() {

    if (webview.canGoBack()) {
        webview.goBack();
    } else {
        super.onBackpressed();
    }
}

private boolean checkConnection() {
    boolean isConnected = ConnectivityReceiver.isConnected();
    return isConnected;
}

@Override
protected void onResume() {
    super.onResume();
    MyApplication.getInstance().setConnectivityListener(this);
}
}

当我使用模拟器检查chrome中的网站时,发现我的ajax保持挂起状态,然后在一段时间后取消.
提前致谢.

解决方法:

通过覆盖shouldInterceptRequest拦截你的ajax调用是这样的:

private class LoadInSame extends WebViewClient {
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView webview, WebResourceRequest webrequest)
    {
        Log.d("test", "shouldInterceptRequest");
       return this.handleRequest(webrequest.getUrl().toString());
    }
    @NonNull
    private WebResourceResponse handleRequest(@NonNull String urlString) {
        try {
            URL url = new URL(urlString);
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
            connection.setRequestProperty("User-Agent", "");
            connection.setRequestMethod("GET");
            connection.setDoInput(true);
            connection.connect();

            InputStream inputStream = connection.getInputStream();
            return new WebResourceResponse("text/json", "utf-8", inputStream);
        } catch (MalformedURLException e) {
            e.printstacktrace();
            return null;
        }
        catch (ProtocolException e) {
            e.printstacktrace();
            return null;
        }catch (IOException e) {
            e.printstacktrace();
            return null;
        }

    }
}

还请遵循JAVA命名约定.

Android 2.3和Phonegap,navigator.online不起作用

Android 2.3和Phonegap,navigator.online不起作用

我测试了navigator.online,直到我用PhoneGap构建了应用程序,之后,navigator.online总是返回true.
有谁知道如何取消缓存或刷新此值?我需要“点击”活动.

解决方法:

在开发应用程序时,我也遇到了这个问题.

我用的是:

document.addEventListener("online", onOnline, false);
document.addEventListener("offline", onOffline, false);

当设备断开连接或即时连接到互联网时,将触发这些事件.

您可以在函数中存储一些全局变量

function onOnline(){}

function onOffline(){}

然后检查这些全局变量的值,并根据值执行任何操作.

今天的关于Phonegap跨域AJAX POST请求在Android上不起作用安卓跨域请求的分享已经结束,谢谢您的关注,如果想了解更多关于ajax – 在iPhone和Android上使用Session变量和带有Phonegap的cookie、AJAX呼叫在Phonegap中不起作用,但正常工作、Ajax在android webview中不起作用、Android 2.3和Phonegap,navigator.online不起作用的相关知识,请在本站进行查询。

本文标签: