UPDATE 3エンドポイントhttp://httpbin.org/user-agentを打つ、要求が正常に返さAndroidの組み込みのWebViewからの呼び出しに応答しませんでした。だから、私のHaskell Warp + WAIアプリケーションサーバで何かが間違っています。ハスケルWARP/WAIサーバは、AJAXが
ほとんどのブラウザでサーバAPIコールを動作させることはできますが、Android WebViewではできません。
明確にするために、私ははどのドメイン間のリクエストも行っていません。ここでは何百もの質問がありますが、私のAJAXリクエストはWebViewがロードしたのと同じドメインにあります。
代わりにjQueryのUPDATE 2私はそうのような、より基本的なXHRメソッドを使用:
function pingServer()
{
var xhr = new XMLHttpRequest();
xhr.open('get', URL + 'ping');
// Track the state changes of the request.
xhr.onreadystatechange = function()
{
var DONE = 4; // readyState 4 means the request is done.
var OK = 200; // status 200 is a successful return.
if (xhr.readyState === DONE)
{
if (xhr.status === OK)
{
$('#submitDialog p').text(xhr.responseText + ' : ' + xhr.status);
}
else
{
$('#submitDialog p').text(xhr.responseText + ' : ' + xhr.status);
}
}
};
xhr.send(null);
}
まだ運。 xhr.responseTextは空白で、xhr.statusは、何かが私のサーバーに問題がある場合、私は思ったんだけど0
のですか?私は、WAIでHaskellベースのWARPである普通ではないサーバーを使用しています。 ...しかし、他のすべてのブラウザですべてうまく動作するのはなぜですか?
UPDATE私はいくつかのデバッグを行なったし、これは、私は、以下に示すAJAXコール(基本的には 'サーバーのアップです?' GETクエリ)に取得していますエラーです:
error: NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load ' http://www.example.net:2753/ping '
言うまでもなく、正確なURL(例ではなく、私が使っている実際のURL)は、モバイルやデスクトップのブラウザで正常に読み込まれます - Android WebViewだけがこの問題を抱えています!
私は単純なAndroidアプリを持っています。リモートURL(ローカルリソースではありません)をロードするWebViewだけです。私のAJAX呼び出しのすべてがすぐにエラーコールバックを呼び出すことを除いて、正常に動作します。私はサムスンギャラクシーS6でテストしていて、SDK 21にアプリケーションをビルドしています。
ここで私の最初のAJAX呼び出し(失敗)は次のようになります。その他は同じプロパティを使用:
$.ajax(
{
url: URL + 'ping',
cache: false,
async: false,
timeout: 5000,
error: fail,
success: transmitScore
});
もちろん
、transmitScore()とは(失敗)が他の場所でスコープ内で定義されています。間違って何が起こっているか
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import java.util.Locale;
public class Example extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.main);
WebView wv = (WebView) findViewById(R.id.webview);
wv.setWebViewClient(new WebViewClient()
{
public void onPageFinished(WebView v, String s)
{
v.loadUrl("javascript: setLang('" +
Locale.getDefault().getLanguage() + "')");
}
});
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl("http://example_url_for_privacy:2753/application");
}
}
任意のアイデア:ここ
は私のWebViewの設定がどのように見えるのですか? AJAXの呼び出しは、デスクトップChromeとAndroid Chromeでうまく動作します。
AJAXのローカルリソースファイルのクロスドメイン権限が必要ですが、ここでは多くの質問がありましたが、それは私の状況ではありません。すべてのリソースはリモートサーバー上にあり、すべてのAJAX呼び出しがそのリソースに移動します。
私もWebChromeClientを使用するように私ののWebViewを設定しようとしましたが、それは何の違いが行われていません。私は今、それがWebViewsのデフォルトであると信じています。。 AJAX呼び出しでは、私は非同期とキャッシュの4つの可能な組み合わせを試してみました。なし。
@Sacheieは、エラーを警告すべきである 'onerror'イベントハンドラを追加してみてください。そして、私に知らせてください –
@SagarV、私はonerror()が余分なエラー情報を提供しているのかどうかはわかりません - コールバックのように見えますので、xhrプロパティをチェックしてエラーを検出する必要はありません。私は、xhr.responseTextが空白で、xhr.statusが0であるという事実よりも詳細なエラー情報をどのように受け取るのか分かりません。 – sacheie
@Ryad URLはSSLを使用していません。それがあれば、なぜデスクトップブラウザ(とAndroid用Chrome)でリクエストが機能するのでしょうか。 私はマニフェスト(?そうでなければ、なぜページでも読み込みます)のインターネットアクセス許可を持っている - *私はAJAXのために必要な別の権限があります* – sacheie