簡體   English   中英

跨域AJAX請求在Android手機的本地瀏覽器上的行為異常

[英]Cross-domain AJAX request behaving oddly on Android phone's native browser

我的設置是這樣的:

  • 一個SQLite數據庫位於我的一個Apache文件夾中
  • Perl cgi腳本位於具有公共權限的同一文件夾中,因此它可以處理數據庫交互
  • 在同一台計算機上運行的AC程序在特定的端口上偵聽特定的JSON請求,並以特定格式的JSON數據進行響應

一個主要用jQuery和HTML編寫的網頁必須一定程度地不斷訪問SQLite數據庫和C程序。 這樣做是使用AJAX請求進行的-這是代碼中的示例:

function sendCommand(cmd, callback) {
$.ajax({url: "http://192.168.42.90:6112/?cmd=" + cmd,
    dataType: "jsonp",
    success: function(d,s,x) {
          callback(d);
    },
    jsonpCallback: "json",
    error: function(xhr) {
         alert('Error: ' + xhr.status);
    }
});
}

因此,我可能會使用sendCommand(“ get_x”,updatePosition)之類的東西來調用它-以便它將get_x命令發送到C程序,並且,如果得到了很好的反饋,則可以通過updatePosition函數運行所述反饋。

因此,如果我在同一台計算機上的網頁上運行,那么所有這些工作都非常出色。 如果我轉移到另一台機器上-在這種情況下,特別是Android手機,通過USB進行IP綁定,它就可以正常工作。 這讓我感到困惑-它不會像我習慣JavaScript那樣默默地失敗。 相反,據我所知,它發出了請求,聲稱它返回了數據,並運行了回調函數-僅根據C程序,什么都沒有發生; 根據Wireshark的說法,沒有發送任何數據包。 而返回的“數據”是一個空的,特殊格式的字符串。 如果我期望“(5,5)”作為C的輸出,它會得到“(0,0)”-為什么它什么都沒得到? 少用0填充“(,)”嗎?

很奇怪。 我已經嘗試了各種小事情,例如將dataType更改為“ json”,確保我的所有權限都設置正確,等等。我相當確定Apache不會干涉,因為日志中沒有任何內容-什么?讓我明白的是,我在Wireshark上什么都看不到。 就像普通電話沒有在發出請求一樣。

也許它正在緩存ajax請求? 嘗試在您的jquery ajax請求中設置cache:false。

您是否在firebug或JS調試器中檢查過控制台? 我遇到一個問題,由於安全問題,jquery阻止您以這種方式進行AJAX調用,並且會返回此錯誤

Access to restricted URI denied" code: "1012

但是,似乎有些人已嘗試解決方法。 如果您還沒有http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide,請仔細閱讀

暫無
暫無

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

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