2013-10-17 70 views
1

我正在嘗試使用ajax調用來從Web API帶回數據。我寫了2個類似的功能,都沒有工作。我可以看到數據通過Fiddler返回,但它不會進入成功調用,對於以下兩個函數。我究竟做錯了什麼?數據在Fiddler的兩個函數中都會返回,但它不會成功。.ajax JSONP parsererror

這裏是嘗試1:

function PopulateDivisions() 
{ 
    $.support.cors=true; 


    $.ajax({ 
     type:'GET', 
     url:'http://IP/Service/api/DivisionSearch/GetAllDivisions', 
     data: {}, 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'jsonp', 

     success: function(data) { 

       alert(data); 

       $("#divisionSelect").append($('<option></option>').val("-99").html("Select One")); 
      $.each(data, function(i, item){ 
       $("#divisionSelect").append($('<option></option>').val(item.Name).html(item.Name)); 
      }); 
     }, 
     error: function(xhrequest, ErrorText, thrownError) { 
      alert("Original: " + thrownError + " : " + ErrorText); 
     } 
    }); 

} 

錯誤:jQuery19102671239298189216_1382022403977不叫:解析錯誤

這裏是提琴手是表示數據傷愈復出:

[{"Id":1,"Description":"Executive","Name":"Executive "},{"Id":2,"Description":"ASD","Name":"Administrative Services Division "},{"Id":3,"Description":"COM","Name":"Communications "},{"Id":4,"Description":"CP","Name":"Contracts and Procurement "},{"Id":5,"Description":"PMD","Name":"Program Management Division "},{"Id":6,"Description":"RED","Name":"Research and Evaluation Division "},{"Id":7,"Description":"IT","Name":"Information Technology "}] 

這裏是嘗試# 2:

function PopulateDivisions2() 
{ 


    $.support.cors=true; 


    $.ajax({ 
     type:'GET', 
     url:'http://IP/Service/api/DivisionSearch/GetAllDivisionsJsonP', 
     data: {}, 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'jsonp', 
     jsonp: false, 
     jsonpCallback: "myJsonMethod", 

     success: function(data) { 
       //data = JSON.parse(data): 
       alert(data); 

       $("#divisionSelect").append($('<option></option>').val("-99").html("Select One")); 
      $.each(data, function(i, item){ 
       $("#divisionSelect").append($('<option></option>').val(item.Name).html(item.Name)); 
      }); 
     }, 
     error: function(xhrequest, ErrorText, thrownError) { 
      alert("PopulateDivisions2: " + thrownError + " : " + ErrorText); 
     } 

    }); 

} 

錯誤:myJsonMethod不叫:parsererror

這裏的數據顯示提琴手是回來了:

"myJsonMethod([{\"Id\":1,\"Description\":\"Executive\",\"Name\":\"Executive \"},{\"Id\":2,\"Description\":\"ASD\",\"Name\":\"Administrative Services Division \"},{\"Id\":3,\"Description\":\"COM\",\"Name\":\"Communications \"},{\"Id\":4,\"Description\":\"CP\",\"Name\":\"Contracts and Procurement \"},{\"Id\":5,\"Description\":\"PMD\",\"Name\":\"Program Management Division \"},{\"Id\":6,\"Description\":\"RED\",\"Name\":\"Research and Evaluation Division \"},{\"Id\":7,\"Description\":\"IT\",\"Name\":\"Information Technology \"}]);" 
+0

您是否收到來自您的請求的json或jsonp?你在代碼中指定了jsonp,但問題的標題告訴「json」,所以問題可能在那裏...... –

+1

我把數據類型設置爲jsonp。 Json沒有帶回任何東西,它是跨域的,所以jsonp工作。我可以在fiddler中看到數據,但在ajax調用中無法成功。 – user1202606

+0

你有沒有解決過這個問題? – Mukus

回答

1

contentType: 'application/json; charset=utf-8'告訴您要發送JSON數據的服務器,但你沒有任何數據你正在發送。試着離開這個設置。

如果你在瀏覽器中瀏覽你的url,你會得到json嗎?

我不知道這是否會事,而是因爲它在jQuery Ajax documentationThis handler is not called for cross-domain script and cross-domain JSONP requests說,我會刪除error設置。

我想嘗試用配置的像這樣的量最少運行此:

$.ajax({ 
    url:'http://IP/Service/api/DivisionSearch/GetAllDivisions', 
    dataType: 'jsonp', 
    success: function(data) { console.log(data); } 
}); 

看看這個作品,然後建立在它之上。如果沒有jsfiddle,很難調試正在發生的事情。

這裏,應該是你的好資源的鏈接:Basic example of using .ajax() with JSONP?

+0

剛剛嘗試過,沒有奏效。 – user1202606

+0

@ user1202606我編輯了我的答案。 – edhedges

+0

如果我把url放在瀏覽器中,我會得到json。 – user1202606

0
function PopulateDivisions2(){ 
$.support.cors=true; 
$.ajax({ 
    type:'GET', 
    url:'http://IP/Service/api/DivisionSearch/GetAllDivisionsJsonP?callback=?', 
    data: {}, 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'jsonp', 
    jsonpCallback: "myJsonMethod" }); 


function myJsonMethod(data) { 
      //data = JSON.parse(data): 
      alert(data);$("#divisionSelect").append($('<option></option>').val("-99").html("Select One")); 
     $.each(data, function(i, item){ 
      $("#divisionSelect").append($('<option></option>').val(item.Name).html(item.Name)); 
     }); 
    }} 

你可以試試上面的代碼?我已經刪除了成功回調並在查詢字符串中包含了回調。