2013-07-31 104 views
0

這是一個反覆出現的問題,我找到了幾個解決方案。但是沒有一個適合我。
嘗試使用jQuery AJAX發佈表單。Spring MVC:415(Unsupported Media Type)錯誤

注:我昨天發佈了它,認爲這是客戶端問題。嘗試 客戶端的一切可能,但沒有運氣。

春季控制器

@RequestMapping(value="/save",method=RequestMethod.POST,consumes="application/json") 
    @ResponseBody public String handleSave(@RequestBody String formData) 
    { 


     System.out.println(formData); 
} 

jQuery的請求(嘗試一切什麼人的意見建議)

,如果我送data:$(this).serialize()contentType:application/json

$('form').submit(function() { 
        $.ajax({ 
         url: $(this).attr('action'), 
         type: 'POST', 
         data: collectFormData(), 
         headers: { 
          "Content-Type":"text/xml" 
         }, 
         dataType: 'xml;charset=utf-8', 
         success: function (data) { 
          alert('data:'+data) 
         }, 
         error: function (jqXHR, textStatus, errorThrown) { 
          alert('jqXHR:'+jqXHR+'\n'+'textStatus:'+'\n'+textStatus+'errorThrown:'+errorThrown); 
         } 
        }); 

        return false; 
       }); 
它工作正常

collectFormData()

function collectFormData() 
      { 
       $rootElement = $.createElement($('form').attr('name')); 
       $('form').find('div.section').each(function(index, section) { 
        var $sectionElement = $.createElement($(section).attr('name')); 
        console.log('Section Name is:'+$sectionElement); 
        $(section).find('input').each(function(i, field) { 
         var $fieldName = $.createElement($(field).attr('name')); 
         $fieldName.text($(field).val()); 
         $sectionElement.append($fieldName); 
        }); 
        $rootElement.append($sectionElement); 
       }); 
       console.log('Form XML is '+$rootElement.html()); 
       return $rootElement.html();     
      } 

HTML

<div class="section" name="amount"> 
     <span class="section-title">Personal Information</span> 
      <div class="span6 form-inline"> 
       <label class="pocLabel"> 
        <span style="color:red;">*</span> 
       Amount Of Insurance</label> 
       <input type="text" name="amount-amountOfInsurance" required="" id="123456" onblur="validateWithPRASE(this)"> 
      </div> 
      <div class="span6 form-inline"> 
       <label class="pocLabel"> 
        <span style="color:red;">*</span> 
       Customer First Name</label> 
       <input type="text" name="amount-firstName" required=""> 
      </div> 
      <div class="span6 form-inline"> 
       <label class="pocLabel"> 
        <span style="color:red;">*</span> 
       Customer Last Name</label> 
       <input type="text" name="amount-lastName" required=""> 
      </div> 
      <div class="span6 form-inline"> 
       <label class="pocLabel"> 
        <span style="color:red;">*</span> 
       Middle intials</label> 
       <input type="text" name="amount-middleIntials" required=""> 
      </div> 
      <div class="span6 form-inline"> 
       <label class="pocLabel"> 
        <span style="color:red;">*</span> 
       Date</label> 
       <input type="text" id="datepicker" class="datepicker" name="date"> 
      </div> 
      <div class="span6 form-inline"> 
       <label class="pocLabel"> 
       Street Address</label> 
       <input type="text" name="amount-address"> 
      </div> 
      <div class="span6 form-inline"> 
       <label class="pocLabel"> 
       City</label> 
       <input type="text" name="amount-city"> 
      </div> 
      <div class="span6 form-inline"> 
       <label class="pocLabel"> 
       State</label> 
       <input type="text" name="amount-state"> 
      </div> 
      <div class="span6 form-inline"> 
       <label class="pocLabel"> 
       State 2</label> 
       <input type="text" name="amount-state"> 
      </div> 
     <div class="row-fluid show-grid"> 
     </div> 
     </div> 
+0

你可以添加'collectFormData()'的示例輸出嗎? –

+0

你正在發佈什麼?服務器是否支持XML POST? –

+0

@WouterHuysentruit我將'collectFormData()'替換爲''但仍然是相同的錯誤。 –

回答

0

我覺得charset應該contentType而不是dataType定義,像這樣:

$('form').submit(function() { 
    $.ajax({ 
     url: $(this).attr('action'), 
     type: 'POST', 
     data: collectFormData(), 
     dataType: 'xml', 
     contentType: "text/xml; charset=utf-8", 
     success: function (data) { 
      alert('data:'+data) 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      alert('jqXHR:'+jqXHR+'\n'+'textStatus:'+'\n'+textStatus+'errorThrown:'+errorThrown); 
     } 
    }); 

    return false; 
}); 

也驗證次在您的XML數據從版本和編碼開始:

<?xml version="1.0" encoding="UTF-8"?> 
+0

沒有運氣。同樣的錯誤。 –

+0

你也可以用'<?xml version =「1.0」encoding =「UTF-8」?>'來啓動你的xml數據嗎? –

+0

像這樣更新,但同樣的錯誤。 '數據: '<?XML版本= 「1.0」 編碼= 「UTF-8」?>', 數據類型: 'XML', \t \t \t \t的contentType:「文本/ XML;字符集= utf-8的「,' –

1

您的控制器只接受JSON。它永遠不會消耗XML.Try使它消耗兩個:

@RequestMapping(value="/save", 
       method=RequestMethod.POST, 
       consumes={"application/json", "application/xml"}) 
+1

當然''application/xml'可以有'text/xml'或者兩者兼有('consumes = {「application/json」,「application/xml」,「text/xml」}'),但是[I'd使用應用程序/ xml](http://www.grauw.nl/blog/entry/489),雖然有[關於它的辯論](http://stackoverflow.com/questions/4832357/whats-the-difference-間文本的XML-VS-應用程序的XML換web服務-respons)。 – acdcjunior

+0

現在請求到達控制器,但之後,我得到'從文本到應用程序/ xml'從ajax請求沒有轉換。 –

+0

嘗試使用:'dataType:'xml''並對您的數據進行編碼data:encodeURIComponent(collectFormData())'。 – acdcjunior

相關問題