簡體   English   中英

當代碼在瀏覽器上運行正常時,為什么JavaScript警報在Phonegap Android App中顯示空字符串?

[英]Why does JavaScript alert display an empty string in Phonegap Android App while the code is working perfectly fine on browser?

我正在開發一個簡單的PhoneGap應用程序,該應用程序可與運行PHP的服務器通信,獲取字符串並將其顯示在JavaScript警報中。

該應用程序在瀏覽器上可以完美運行。 JavaScript警報顯示服務器上PHP代碼返回的字符串。 此操作發生在按鈕的單擊事件上。

這是標記

  <!DOCTYPE html>
<html xml:lang="en" lang="en">
    <head>
        <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;">
        <title>PhoneGap</title>
        <script type="text/javascript" charset="utf-8" src="jquery.min.js"></script>
        <script src="cordova.js" charset="utf-8" type="text/javascript"></script>
        <script type="text/javascript" charset="utf-8" src="index.js"></script>
    </head>
    <body>
        <h1>Hello World!</h1>
        <button id="eventfire">Click</button>
    </body>
</html>

JS代碼

$(document).ready(function(){
    $("#eventfire").click(function(){
    var data = {
        "action": "test"
    }; 
    data=$.parseJSON('{ "name": "John" }');
     $.ajax({
            type: "POST",
            dataType: "text",
            url: "http://192.168.x.x/HelloWorldTest/response.php", //Relative or absolute path to response.php file
            data: data,
            success: function(data) {
            alert(data);
            alert("type is " + typeof data + ". Length is " + data.length);
            },
            error: function (xhr, ajaxOptions, thrownError) {
        alert(xhr.statusText);
        alert(xhr.responseText);
        alert(xhr.status);
        alert(thrownError);
    },
             statusCode: {
        400: function    () {
            alert("Bad request!");
        },
        401: function() {
            alert("Unauthorized!");
        },
        403: function() {
            alert("Forbidden!");
        },
        404: function() {
            alert("Page not found!");
        },                
        408: function() {
            alert("Request Timeout!");
        },
        200: function() {
            alert("page reached");
        },    
    }
        }); 
    });

})

PHP代碼

<?php
echo 'john';
?>

當我在AVD上運行此代碼時,警報不會顯示該字符串。 我從未見過這樣的警報顯示。 成功功能內部顯示的警報如下所示。

空字符串警報

在檢查此字符串時,我知道長度為0。

弦長

我能夠在瀏覽器中以0個字符長度的字符串重現相同的問題。

我不確定為什么這段代碼在瀏覽器上運行時能正常工作,但在AVD上卻表現異常。 該字符串已按預期在瀏覽器上顯示,但未在AVD上顯示。

在下面找到相同代碼的屏幕快照,以在瀏覽器上顯示正確的警報。

服務可用性在此處輸入圖片說明

我想知道為什么PHP中的字符串丟失的可能原因?

我從未使用過PhoneGap,但是由於您的php文件與嘗試調用它的文件存儲在不同的服務器上,因此您將需要啟用跨域資源共享(CORS) (盡管我無法確定這是唯一的)問題)


嘗試在服務器的.htaccess文件中添加Header set Access-Control-Allow-Origin "*"

默認情況下,當請求來自未存儲在同一服務器上的文件時,服務器將阻止對php文件等資源的訪問。

例如,如果我有一個位於http://myfirstwebsite.com/awesome.jsjs文件,並且在該文件中我對http://mysecondwebsite.com/loadstuff.php進行了ajax調用,則請求將被阻止服務器,並在控制台中產生以下錯誤:

XMLHttpRequest cannot load http://mysecondwebsite.com/loadstuff.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://mysecondwebsite.com' is therefore not allowed access.

我不確定您是否可以在PhoneGap或我從未使用過的地方看到此錯誤。

正如警告所暗示的,為了解決此問題,必須設置“ Access-Control-Allow-Origin”標頭以允許遠程文件訪問服務器上的文件。


這是一個說明如何在Ubuntu上執行此操作的教程

以防萬一鏈接消失,以下是步驟(直接從該站點復制)

  1. 確保已安裝mod_headers Apache模塊。 為此,請檢出/ etc / apache2 / mods-enabled /並查看其中是否存在“ headers.load”。 如果沒有,則只需sudo ln -s /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load

  2. 將Access-Control-Allow-Origin標頭添加到所有HTTP響應。 您可以通過在配置文件(例如/ etc / apache2 / sites-available / default文件)中的所需部分添加Header set Access-Control-Allow-Origin“ ”行來實現。 說“ ”將允許從任何地方進行跨站點XHR請求。 您可以說“ www.myothersite.com”以僅接受來自該來源的請求。

  3. 重新加載apache服務器。 須藤/etc/init.d/apache2重新加載

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM