对于除 IE 之外的所有浏览器,一切都很完美,在这里,它似乎不会发布到Server
的帖子,并且SyntaxError
被记录到控制台
我在 WordPress 门户网站上有一个简单的注册页面,该页面使用cURL
将注册表单发布到另一台计算机。
JS
:
$("#formSubmitButton").click(function () {
$('#activity').show();
AttachValidation($("#form"));
if ($("#form").valid()) {
$.ajax({
cache: false,
type: "POST",
url: '',
data: $('#form').serialize(),
success: function(data) {
ProcessResponse(data, "form");
},
dataType:'json'
});
}
else {
$('#activity').hide();
}
return false;
});
错误处理的 JS
:
$(document).ajaxError(function (event, jqxhr, settings, exception) {
$('#activity').hide();
toastr.error('An unhandled error has occured. Please contact customer support');
console.error(jqxhr);
console.error(exception);
});
PHP
的一些 WordPress REST client
:
$this->acceptType = 'application/json';
protected function executePost ($ch)
{
if (!is_string($this->requestBody))
{
$this->buildPostBody();
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->requestBody);
curl_setopt($ch, CURLOPT_POST, 1);
$this->doExecute($ch);
}
protected function setCurlOpts (&$curlHandle)
{
curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curlHandle, CURLOPT_TIMEOUT, 40);
curl_setopt($curlHandle, CURLOPT_URL, $this->url);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array ('Accept: ' . $this->acceptType, 'api-key: ' . $this->ApiKey));
}
protected function doExecute (&$curlHandle)
{
$this->setCurlOpts($curlHandle);
$this->responseBody = curl_exec($curlHandle);
$this->responseInfo = curl_getinfo($curlHandle);
curl_close($curlHandle);
}
IE 开发工具的网络捕获也没有显示HTTP
帖子。
很正常的东西。服务器正确返回json,所有浏览器都可以读取它。只有 IE 有这个错误, IE 开发工具真的不让我看看服务器是否被调用。
我试图在此次通话中将缓存设置为false,其中包括没有任何运气。
基本上我的整个设置都有效,只有 IE 才有问题。我在 IE11 。我收到了一个用户关于该表单发布的不同IE版本的报告,但是我的网站没有显示响应文本,而是要求用户将其下载为.json文件。也许这一切都是相关的。
谢谢!
答案 0 :(得分:4)
此设置的问题非常简单。我的设置适用于所有浏览器,但事实上,javascript正在为ajax POST声明一个空URL,它正在抛弃IE。网址由底层REST客户端代码(PHP)安全地读取和设置
我从JS中删除了url参数,它适用于IE,但没有破坏其他浏览器。
感谢大家的评论。
$("#formSubmitButton").click(function () {
$('#activity').show();
AttachValidation($("#form"));
if ($("#form").valid()) {
$.ajax({
cache: false,
type: "POST",
data: $('#form').serialize(),
success: function(data) {
ProcessResponse(data, "form");
},
dataType:'json'
});
}
else {
$('#activity').hide();
}
return false;
});