gpt4 book ai didi

javascript - 为什么 AJAX 调用不仅仅在 iOS 上工作,在其他地方都工作得很好?

转载 作者:行者123 更新时间:2023-11-29 05:40:48 24 4
gpt4 key购买 nike

我正在使用 jQuery 和 PHP 从头开始​​创建一些 AJAX 星级评级,并意识到它在任何地方都工作正常,但在 iOS 上却不然。我检查了一些插件(jRating)并遇到了同样的问题。它将数据发送到服务器 (PHP),但在错误时返回错误未定义:处理程序。

我已经尝试了几乎所有其他平台和浏览器(Linux - chrome、FF、Opera;Windows - IE、Edge;Android - Chrome、Opera),一切都按预期工作。 iOS 上的浏览​​器均无法正常工作。值得一提的是,该服务器位于 Amazon Cloudfront 后面。但我已经让它传递来自源服务器的所有 header ,并且我可以在 Chrome 开发者控制台中看到正确的 Access-Control-Allow-Origin header 。

我还搜索并尝试了所有关于缓存和相对 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);

它应该写成“成功”,但它会警告“速率问题”。错误:未定义。文本状态:错误,错误抛出:

最佳答案

我相信您正在本地计算机上进行测试。

当您在计算机本身上测试时,“my/ajax/url”指的是同一域。假设您的测试网站位于 http://localhost/mywebsite ,AJAX 将命中完整的绝对 URL,即“http://localhost/mywebsite/my/ajax/url

在您的 iOS 上(我相信这是不同的设备,例如 iPhone/平板电脑/笔记本电脑/等),当 AJAX 尝试点击“http://localhost/mywebsite/my/ajax/url”时,它会尝试在同一设备中查找该 URL (iPhone/平板电脑/笔记本电脑/等),而不是托管网站的计算机。

所以:

  1. 确保您设置的网址正确。 在 AJAX 之前放置完整绝对 URL 的警报(如“http://localhost/mywebsite/my/ajax/url”,而不是“my/ajax/url”)。
  2. 在 PHP 中,在第一行输入:echo "hi from server"; exit; ,并在 AJAX 成功函数中输入: alert(data);

检查您是否将 AJAX 发送到正确的 URL (#1),并从正确的服务器接收 (#2)。

关于javascript - 为什么 AJAX 调用不仅仅在 iOS 上工作,在其他地方都工作得很好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56576840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com