ajax POST仅在IE中生成SyntaxError

时间:2014-07-13 21:54:42

标签: jquery ajax json wordpress curl

对于除 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帖子。

Error as it appears on IE's dev tools

很正常的东西。服务器正确返回json,所有浏览器都可以读取它。只有 IE 有这个错误, IE 开发工具真的不让我看看服务器是否被调用。

我试图在此次通话中将缓存设置为false,其中包括没有任何运气。

基本上我的整个设置都有效,只有 IE 才有问题。我在 IE11 。我收到了一个用户关于该表单发布的不同IE版本的报告,但是我的网站没有显示响应文本,而是要求用户将其下载为.json文件。也许这一切都是相关的。

谢谢!

1 个答案:

答案 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;
});