2013-05-23 16 views
11

Chrome'da bunun gibi bir HTTP PUT'si var, ancak FireFox 21'de değil. Javascript konsolunda veya arka uçta hata yok. jQueryBu jQuery AJAX PUT neden Chrome'da çalışıyor, ancak FF değil

<div id="createTeamModal" class="small reveal-modal"> 
     <form id="createTeamForm"> 
      <div class="row"><p id="teamFlavorText" class="lead">Building a new team</p></div> 
      <div class="row"> 
       <div class="small-4 large-4 columns"><label>Team Name:</label></div> 
       <div class="small-6 large-6 columns"><input name="teamName" id="teamName" type="text" size="20"/></div> 
      </div> 
      <div class="row"><p class="lead">Does this team work for a business?</p></div> 
      <div class="row"> 
       <div class="small-4 large-4 columns"><label>Business Size:</label></div> 
       <div class="small-6 large-6 columns"> 
        <select id="businessSizeSelect" name="businessSizeSelect"> 
        <option value="1">Nope, I work alone</option><option value="2">2 to 49</option><option value="3">50 to 99</option><option value="4">100 to 999</option><option value="5">1,000+</option> 
        </select> 
       </div> 
      </div> 
      <div id="businessLocationDiv" class="row" style="display: none; margin-top: 20px;"> 
       <div class="small-4 large-4 columns"><label>Business Location:</label></div> 
       <div class="small-6 large-6 columns"> 
        <select id="businessLocationSelect" name="businessLocationSelect"> 
        </select> 
       </div> 
      </div> 
      <div id="businessTypeDiv" class="row" style="display: none; margin-top: 20px;"> 
       <div class="small-4 large-4 columns"><label>Industry:</label></div> 
       <div class="small-6 large-6 columns"> 
        <select id="businessTypeSelect" name="businessTypeSelect">      
        </select> 
       </div> 
      </div> 
      <div class="row" style="margin-top: 20px;"> 
       <div class="large-offset-10 small-1 large-1 columns"> 
        <button id="createTeamButton" class="small button">Create</button> 
       </div> 
      </div> 
     </form> 
     <a class="close-reveal-modal">&#215;</a> 
    </div> 

Ve burada: Burada

HTML ben Fiddler onları gözlenen ve adres

$("#createTeamButton").click(function() { 
    var teamObject = new Team(); 
    teamObject.description = $("#teamName").val(); 
    teamObject.businessSize = $("#businessSizeSelect").val(); 
    teamObject.businessType = $("#businessTypeSelect").val(); 
    teamObject.businessLocation = $("#businessLocationSelect").val(); 

    $.ajax({ 
     type: "PUT", 
     url: "/ajax/rest/team", 
     dataType: "json", 
     data: JSON.stringify(teamObject), 
     success: function() { 
      // Reload the team select box 
      loadTeamSelectBox(); 

      // Pop up the site create modal 
      $('#createSiteModal').foundation('reveal', 'open'); 
     }, 
     error: ajaxErrorHandler 
    }); 
}); 

çalışma (Chrome) iş değil arasındaki fark (Firefox) HTTP PUT’i Chrome’da tetikler ve Firefox’ta çalışmaz.

Şimdi jQuery.ajax PUT öğesinin tüm tarayıcılarda garanti edilmediğini biliyorum.

Ben Are the PUT, DELETE, HEAD, etc methods available in most web browsers?

  • http://annevankesteren.nl/2007/10/http-method-support
  • Bu siteler tüm tarayıcılarda çalışmayabilir o PUT teyit

    • okudum ama FF içinde çalışması gerekir.

      Son olarak, FF21 ile aşağıdaki vurmak ve PUT

      kesinlikle bu çevrede mühendisi olabilir

      çalışır, ancak bu çalışması gerekir gibi geliyor bana. Ben jerry-teçhizat bir şey değil, daha doğrusu jQuery's .ajax düzgün çalışması için tercih ederim.

      Diğer Detaylar: * jQuery sürüm 2.0.0 * Arka Uç Spring3

      olduğunu

      [Edit HTML eklemek] ben başka bir şey eksik olabilir düşünüyorum

    +0

    Ben tüm tarayıcılarda destekleyecektir sanmıyorum. ama burada birkaç bağlantı benzer http://stackoverflow.com/questions/5846741/jquery-put-ajax-request-not-working http://stackoverflow.com/questions/5894400/does-jquery-ajax-work-in- modern tarayıcılar-with-put-ve-delete – Sakthivel

    +0

    arka ucun nedir? – Sagish

    +0

    Bunun jQuery hatası olduğunu düşünüyorsanız, kullanmakta olduğunuz jQuery dosyasının tam sürümünü sağlamanız gerekir. Ancak, URL de değiştiği için, "PUT" ile bir alakası olmadığını düşünüyorum. – Esailija

    cevap

    1

    İşte hayal kırıklığı yanıt. Düğme tıklaması, bunu yapmak zorunda olmasa bile formu gönderiyordu. Ben onsubmit = "false döndür" koydum formda ve problem çözüldü.

    +0

    LOL. Bunu çözebildiğine sevindim. – idbehold

    1

    - Bu jsFiddle üzerinde bir PUT isteği yapar yeni Chrome ve Firefox 21:

    http://jsfiddle.net/QKkQg/

     var teamObject = new Object(); 
        teamObject.description = $("#teamName").val(); 
        teamObject.businessSize = $("#businessSizeSelect").val(); 
        teamObject.businessType = $("#businessTypeSelect").val(); 
        teamObject.businessLocation = $("#businessLocationSelect").val(); 
    
        $.ajax({ 
         type: "PUT", 
         url: "/ajax/rest/team", 
         dataType: "json", 
         data: JSON.stringify(teamObject), 
         success: function() { 
          // Reload the team select box 
          loadTeamSelectBox(); 
    
          // Pop up the site create modal 
          $('#createSiteModal').foundation('reveal', 'open'); 
         }, 
         error: function() { } 
        }); 
    
    3

    I c Ben google.com ve basın f12 (firebug) gidince, pencerelerde firefox 21,0 üzerinde iddianızı üretmek yeniden an't sonra aşağıdaki kodu çalıştırın:

    var s = document.createElement("script"); 
    s.src="http://code.jquery.com/jquery-1.9.1.js"; 
    document.body.appendChild(s); 
    //allow some time to load and then run this 
    $.ajax({ 
        type: "PUT", 
        url: "/search", 
        dataType: "json", 
        data: JSON.stringify({hi:"there"}), 
        success: function (data) { 
        console.log(data); 
        }, 
        error: function(e) { 
        console.log(e); 
        } 
        }); 
    

    Ben yanıtı 405 yöntemi daha da önemlisi kabul edildiğini, ancak olsun; Konsoldaki bağlantı detaylarını açarken, PUT değil, mesaj görüyorum.

    http://jqueryui.com/autocomplete/#remote'a gidip kodu (JQuery'yi dahil etmeden) URL'yi kullanarak çalıştırın: "/ sources/demos/autocomplete/search.php", xml başarılı ve firebug, PUT isteğini gösterir.

    Sunucu tarafı kodunun PUT isteğini algıladığını (google'un POST'u da POST olarak kabul etmesini de reddediyorsa) test edebileceğim bir site bilmiyorum, ancak Firebug'un bildirdiği bir PUT isteğini gönderiyor.

    [GÜNCELLEME]

    ben Yukarıdaki kod bir PUT istekte% 100 emin olduğunu Firefox 21.0 üzerinde onaylayabilir. Sadece bir .net uygulamasıyla test ettim ve her iki Chrome 27.0.1453.94 FF bir PUT isteğini ayarladı.

    1

    Sunucuya hangi tür içerik gönderdiğinizi belirtmiyorsunuz. Sunucuda verilen formatın ne olduğunu bilmediğinden veriyi sorgudan okumaya bile çalışmadığı benzer bir problemim vardı, bu yüzden sadece göz ardı edildi. Bir jQuery isteği için dataType belirtilirken, jQuery'ye sunucunun size yanıt vermesi gereken beklenen biçim olduğunu söylüyorsunuz.

    $.ajax({ 
        type: "PUT", 
        url: "/ajax/rest/team", 
        dataType: "json", 
        contentType: "application/json", 
        data: JSON.stringify(teamObject) 
    }).done(function() { 
        // Reload the team select box 
        loadTeamSelectBox(); 
    
        // Pop up the site create modal 
        $('#createSiteModal').foundation('reveal', 'open'); 
    
    }).fail(ajaxErrorHandler); 
    

    Backbone.js sen as reference kullanabileceğiniz güzel RESTful API vardır: Gönderdiğiniz hangi veri formatı sunucusu anlatmak için, bir contentType sağlamalıdır.