1

女士/男士:

做一个在 Chrome 和 FireFox 中运行良好的 $.post。IE - 没那么多......成功回调(addTicketAndRender())永远不会被击中:

http://jsfiddle.net/AeQxJ/1/

我已经阅读了一些关于需要通过我的 POST 对 IE 进行“缓存清除”的内容,但我对这些东西比较陌生,所以不知道这是否适合尝试,如果是,该怎么做。

资源:

function addTicketAndRender(incomingTicket) {

    console.log("Add and Render");
    alert(incomingTicket);
}



$(document).ready(function() {

    console.log('ready');

    // variables to feed trusted ticket retrieval
    var trustedURL = "http://tableau.russellchristopher.org/trusted",
        userName = "foo",
        serverURL = "http://tableau.russellchristopher.org/";



    $.post(trustedURL, {
        username: userName,
        server: serverURL,
        client_ip: "",
        target_site: "",
        cache: "false"
    }, function(response) {
        addTicketAndRender(response);
    });

});​

请帮个忙好吗?

Update1:​​将其切换为 ajax 帖子:没有区别。在 Chrome 和 Firefox 上仍然很好,在 IE 中仍然死气沉沉:

    $.ajax( {
      url : trustedURL,
      type: "POST",
      data : {
        username : userName,
        server : serverURL,
        client_ip : "",
        target_site : "" 
      },    
      cache : false


    } ).done( addTicketAndRender );

更新 2:集成了额外的缓存清除技术。相同的行为 - Chrome/FF 工作,IE 没有任何东西 - 使用 Fiddler,我可以看到从http://jsfiddle.net/AeQxJ/3//运行下面的代码时 POST 出去了。在 IE 中,这永远不会发生。在 jsfiddle 之外测试并看到相同的结果。下一步:通过在我没有触及浏览器设置的盒子上进行测试,排除我愚蠢的 IE 浏览器设置。

function addTicketAndRender(incomingTicket){


    alert(incomingTicket);
}

$(document).ready(function() {
   // variables to feed trusted ticket retrieval

    var trustedURL = "http://tableau.russellchristopher.org/trusted",
        userName = "foo",
        serverURL = "http://tableau.russellchristopher.org/";

var number=Math.floor(Math.random()*1);
$.ajax( {
      url : trustedURL + "?" + number,
      type: "POST",
      data : {
        username : userName,
        server : serverURL,
        client_ip : "",
        target_site : "" 
      },    
      cache : false
     } ).done( addTicketAndRender );

});​

更新 4:排除了我的 IE 副本作为问题。在 POST 中添加了错误捕获代码,并且只有在 IE 中运行时,我才会看到这个抛出:

         error: function(xhr, textStatus, error){
              alert(xhr.statusText);
              alert(textStatus);
              alert(error);

//output:

//    xhr.StatusText: No Transport
//    testSttus: Error
//    error: No Transport

搜索“IE No Transport jquery POST”将我带到这里:

对 WebService 的 jQuery 调用返回“无传输”错误

帖子表明添加jQuery.support.cors = true;应该可以解决问题,但是当我这样做时,会返回错误:

//output:

//    xhr.StatusText: Error: Access is denied
//    testSttus: Error
//    error: Error: Access is denied
4

4 回答 4

3

改变

$.post( ...
    cache: "false"
    ...

至:

$.ajax(...
    cache: false,
    ...

注意,第一个缓存是一个无意义的字符串,而后者是一个布尔值 false。

于 2012-06-05T12:31:05.323 回答
1

If the cache: false is not working for you, the old school way was to add a get parameter to the url, like a random number, so:

var number=Math.floor(Math.random()*1)
$.ajax( {
      url : trustedURL + "?" + number,
      type: "POST",
      data : {
        username : userName,
        server : serverURL,
        client_ip : "",
        target_site : "" 
      },    
      cache : false


    } ).done( addTicketAndRender );

This should help you debugging as well (change from random number to sequential). If still doesnt work I remove .done and use something like complete i.e.

$.ajax( {
      url : trustedURL,
      type: "POST",
      data : {
        username : userName,
        server : serverURL,
        client_ip : "",
        target_site : "" 
      },    
      cache : false,
      complete : function() {
         addTicketAndRender
      }
  });

One last thing, if your doing this using your jsfiddle page, make sure you remove console.log() from your code, as this will cause IE to break (it doesn't understand console.log).

于 2012-06-05T12:57:55.047 回答
0

IE 倾向于在console.log('');语句上绊倒。尝试将其包装到 Log() 函数中:

function Log(text) {
    try {
        console.log(text);
    }
    catch (e) {
    }
}

如果这样可以解决您的问题,您将希望在整个项目中使用这种方法来使用 console.log() 。

于 2012-06-05T12:59:08.493 回答
0

$.post只是$.ajax()链接的简写版本:http: //api.jquery.com/jQuery.post/

如果您需要更多控制,我建议$.ajax()您使用,因为“本机”方法有更多选择。链接:http ://api.jquery.com/jQuery.ajax/

除了关于 jQuery.ajax() 的一个很好的编码技巧之外,总是将$.ajax({cache: false})某个地方设置为默认值,因为 IE 是(令人惊讶的)唯一cache: true默认的浏览器

于 2012-06-05T12:42:36.873 回答