0

我无法从服务器获取我的 Ajax 调用。我正在使用 SVN 版本控制,我的代码在我身边工作,但在我将代码推送到生产端后遇到了麻烦。

这些代码适用于我这边的 FF、Chrome 和 IE。

对于服务器,FF 和 chrome 都在工作,但只有 IE 有问题。

我想知道这里是否有人可以帮助我。非常感谢。

我有

//call ajax function
callAjaxToCheck();


//call this function if there are errors
//I am getting Not connect.\n Verify Network error whose status == 0 when using IE on server side only!!!!!

function error_loading(jqXHR, exception){
    if (jqXHR.status === 0) {
        alert('Not connect.\n Verify Network.');
    } else if (jqXHR.status == 404) {
        alert('Requested page not found. [404]');
    } else if (jqXHR.status == 500) {
        alert('Internal Server Error [500].');
    } else if (exception === 'parsererror') {
        alert('Requested JSON parse failed.');
    } else if (exception === 'timeout') {
        alert('Time out error.');
    } else if (exception === 'abort') {
        alert('Ajax request aborted.');
    } else {
        alert('Uncaught Error.\n' + jqXHR.responseText);
    }                 
}

function success(data) { 
    if (data=='jump') {
        $.getScript('inc/haha.js', function() {

            codes....

        });
    }
}


function callAjaxToCheck(){  
    $.ajax({
        url: 'Session.php',
        success: success,
        dataType: "text"
        error: error_loading
    });   
}

更新代码:

请查看我的服务器端文件。

我确定我的ajax函数被调用...

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
    session_start();

     if(isset($_POST['switch'])){
         $_SESSION['image']=$_POST['switch'];

     }

     echo $_SESSION['image'];
4

2 回答 2

1

jqXHR.status === 0表示服务器没有返回任何内容 - 这可能意味着 PHP 端出现致命错误或客户端取消请求。

您的Session.php代码是否依赖于已经存在的会话 - 如果无法找到会话会发生什么?我只是问,因为 Internet Explorer 与其他浏览器具有不同的安全模型,当涉及到在某些沙箱中跨 AJAX 请求发送 cookie 时——通常情况下,它的政策是根本不发送任何 cookie(你的 PHP 是否考虑到这一点?帐户?)。

在客户端,你用什么来触发你的callAjaxToCheck(). 我知道在上面的代码中它是在程序运行中直接调用的。但是,这可能只是为了在 stackoverflow 上发布而进行的简化。该 AJAX 调用是否曾由按钮或链接触发?

我意识到这里有几个问题并没有真正的明确答案,所以我会做出有根据的猜测并声明它很可能是会话/cookie 问题。考虑到这一点,实现P3P策略可能会有所帮助,这可以告诉 IE 通过 AJAX 请求发送 cookie - 但是您必须设置正确的策略才能这样做......这可能有点棘手;这就是为什么大多数寻求快速修复的开发人员只需将以下内容复制并粘贴到他们请求的 PHP 文件的顶部:

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

但是,我不推荐这样做,但它可以是一种快速确定它是否有帮助的方法。

于 2012-08-27T22:21:27.333 回答
1

尝试在 jQuery Ajax 调用中设置cachefalse 。

function callAjaxToCheck() {  
    $.ajax({
        url: 'Session.php',
        cache: false,
        success: success,
        dataType: "text",
        error: error_loading
    });  
}
于 2012-08-27T22:14:31.333 回答