Функция успеха Ajax не работает в Android webview

#android #jquery #ajax #android-studio

#Android #jquery #ajax #android-studio

Вопрос:

Я создал веб-проект с использованием asp.net и загрузка веб-сайта в Android web view. Я использовал Ajax на веб-сайте и перенаправил на URL для достижения успеха. Она отлично работает в веб-браузере и мобильном браузере. Но в Android web view ajax не работает, и он не перенаправляется. Я провел много тестов и не смог найти проблему. Я добавил, return false что это помогает перенаправлять URL, но это неправильное решение. Функция успеха Ajax не работает. В консоли нет ошибки. Вот мой код:-

 package com.project.projectname;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class Home extends AppCompatActivity {

    private WebView webview;

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

        webview = (WebView) findViewById(R.id.webView);
        webview.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.startsWith("tel:") || url.startsWith("https://www.facebook.com/sharer") || url.startsWith("http://twitter.com/share") || url.startsWith("https://wa.me/") || url.startsWith("https://plus.google.com/share")) {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);
                    view.reload();
                    return true;
                }
                view.loadUrl(url);
                return true;
                //return false; This is redirect but ajax success function is not working
            }
        });

        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setDomStorageEnabled(true);

        webview.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
        //        webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        webview.getSettings().setAppCacheEnabled(true);
        webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webview.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        webview.getSettings().setUseWideViewPort(true);
        webview.getSettings().setSavePassword(true);
        webview.getSettings().setSaveFormData(true);
        webview.getSettings().setEnableSmoothTransition(true);

        webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
        webview.loadUrl("your website URL");

    }
    @Override
    public void onBackPressed() {
        if (webview.isFocused() amp;amp; webview.canGoBack()) {
            webview.goBack();
        } else {
            super.onBackPressed();
            finish();
        }
    }
}
  

Код Ajax на веб-сайте

 $.ajax({
    url: '/tapaking/Checkout/Details',
    type: "POST",
    data: JSON.stringify({
        cart: json2,
        note: note,
        schdate: schdate,
        schtime: schtime,
        payment: payment
    }),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(response) {
        if (response.success) {
            $('.sc-cart-clear').click();
            window.location.href = "https://yourwebsite.com/User/UserProfile";
        } else {

        }
    },
    error: function() {
        //alert("An error has occured!!!");
    }
});
  

Комментарии:

1. Вы проверили, работает ли AJAX-запрос в WebView с использованием инструментов удаленного отладчика developers.google.com/web/tools/chrome-devtools / … ?

Ответ №1:

Если вы перенаправляете в другое место, вам может не потребоваться нажимать какую-либо кнопку программно. События щелчка из-за кода в мобильном браузере / webview считаются небезопасными и игнорируются.

Кроме того, в случае мобильного webview мы используем document.location вместо window.location.href . Я думаю, что эти незначительные изменения в вашем коде могут помочь:

 $.ajax({
  url: '/tapaking/Checkout/Details',
  type: "POST",
  data: JSON.stringify({
    cart: json2,
    note: note,
    schdate: schdate,
    schtime: schtime,
    payment: payment
  }),
  dataType: "json",
  contentType: "application/json; charset=utf-8",
  success: function(response) {
    if (response.success) {
      // Probably we don't need to click something here.
      // If required, we can clear with direct invocation of clear action.
      // $('.sc-cart-clear').click();
      document.location = "https://yourwebsite.com/User/UserProfile";
    } else {

    }
  },
  error: function() {
    //alert("An error has occured!!!");
  }
});
  

Если document.location не работает, также попробуйте document.location.replace(url) .

Комментарии:

1. Я пробовал document.location , document.location.replace(url) и window.location.href . Это вообще не поддерживается. Я чувствую, что перенаправление ajax не поддерживается в webview. Итак, я создаю страницу благодарственного сообщения оттуда, через несколько секунд я перенаправляю на страницу назначения с помощью jquery.