簡體   English   中英

為什么AJAX調用不僅僅適用於iOS,其他任何地方都可以運行得很好?

[英]Why AJAX call is not working only on iOS, everywhere else it works great?

我正在使用jQuery和PHP從零開始創建一些AJAX星級評級,並且已經意識到它在任何地方工作正常但在iOS上沒有。 我檢查了一些插件(jRating)並遇到了同樣的問題。 它將數據發送到服務器(PHP)但在錯誤:handler處返回Error Undefined。

我已經嘗試了幾乎所有其他平台和瀏覽器(Linux - chrome,FF,Opera; Windows - IE,Edge; Android - Chrome,Opera),並且每個人都按預期工作。 iOS上沒有瀏覽器正在運行。 值得一提的是服務器落后於Amazon Cloudfront。 但我讓它從原始服務器傳遞所有Headers,我可以在Chrome Developer Console中看到正確的Access-Control-Allow-Origin標頭。

我也搜索並嘗試了緩存和相對URL,JSON數據類型等所有建議,沒有運氣。 我也嘗試將隨機參數添加到POST URL - 沒有運氣。

有時,讓我們說每三個請求它能夠返回正確的數據。

我的JS代碼:

$('.mystars.ajax input').on('click', function(e){
  e.preventDefault();
  var form = $(this).parent();

  $.ajax({
    type: "POST",
    url: 'my/ajax/url',
    context: this,
    cache: false,
    dataType: 'json',
    headers: { "cache-control": "no-cache" },
    async: true,
    crossDomain: true,
    data: form.serialize(),
    xhrFields: {
      withCredentials: true
    },
    success: function(data)
    {
      alert('xhr success');
      // parse show message to user according to server response.
    },
    error: function(jqXhr, textStatus, errorThrown) {
      alert("Rate problem. Error: " + jqXhr.responseText + ", textStatus: " + textStatus + ", errorThrown: " +  errorThrown)
    },
    complete: function(){
      console.log('compete');
    }
  });
});

以下是服務器響應代碼的一部分:

$myResponse['error'] = false;
$myResponse['message'] = 'Everything is just fine';
if (isset($_SERVER['HTTP_ORIGIN'])) {
  header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
  header('Access-Control-Allow-Credentials: true');
  header('Access-Control-Max-Age: 86400');
  header('Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS');
}
header('Content-Type: application/json');
echo json_encode($myResponse);
exit(0);

它應該寫成功但它會警告Rate問題。 錯誤:udnefined。 textStatus:error,errorThrown:

我相信你在本地計算機上進行測試。

當您在計算機上測試時,“my / ajax / url”指的是同一個域。 因此,假設您的測試網站位於http://localhost/mywebsite ,AJAX將點擊完整的絕對URL,即“ http:// localhost / mywebsite / my / ajax / url

在你的iOS上(我相信它是一個不同的設備,如iPhone /平板電腦/筆記本電腦/等),當AJAX嘗試點擊“ http:// localhost / mywebsite / my / ajax / url ”時,它正試圖在相同的設備 (iPhone /平板電腦/筆記本電腦/等),而不是托管網站的計算機。

所以:

  1. 確保您設置了正確的網址。 在AJAX 之前提出完整絕對URL的警報(如“ http:// localhost / mywebsite / my / ajax / url ”,而不是像“my / ajax / url”)。
  2. 在你的PHP中,放入第一行: echo "hi from server"; exit; echo "hi from server"; exit; ,並在你的AJAX成功函數中,把這個: alert(data);

檢查您是否將AJAX發送到正確的URL(#1),以及從正確的服務器(#2)接收。

暫無
暫無

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

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