![](/img/trans.png)
[英]Trouble with Facebook in app browser, rest of the browsers working perfectly fine
[英]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.js
的js
文件,並且在該文件中我對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”標頭以允許遠程文件訪問服務器上的文件。
以防萬一鏈接消失,以下是步驟(直接從該站點復制)
確保已安裝mod_headers Apache模塊。 為此,請檢出/ etc / apache2 / mods-enabled /並查看其中是否存在“ headers.load”。 如果沒有,則只需sudo ln -s /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
將Access-Control-Allow-Origin標頭添加到所有HTTP響應。 您可以通過在配置文件(例如/ etc / apache2 / sites-available / default文件)中的所需部分添加Header set Access-Control-Allow-Origin“ ”行來實現。 說“ ”將允許從任何地方進行跨站點XHR請求。 您可以說“ www.myothersite.com”以僅接受來自該來源的請求。
重新加載apache服務器。 須藤/etc/init.d/apache2重新加載
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.