2013-01-19 32 views
5

içinde [object% 20Object] ile eklenmiştir getJSON yöntemini kullanarak jQuery ile yazdığım özel bir JSON beslemesi almaya çalışıyorum. Bilinmeyen bir nedenden ötürü, URL sonundan sıyrılan cache_gen.php?location=PL4 numarasına sahip görünüyor ve [object% 20Object] ile değiştiriliyor ve 404 hatası oluşuyor.JSON İstek jQuery

İşte kullanıyorum jQuery var:

var fetchData = function() { 

    if (Modernizr.localstorage) { 

     var api_location = "http://weatherapp.dev/cache_gen.php"; 
     var user_location = "PL4"; 
     var date = new Date(); 

     console.log(api_location + '?location=' + user_location); 

     jQuery.getJSON({ 
      type: "GET", 
      url: api_location + '?location=' + user_location, 
      dataType: "json", 
      success: function(jsonData) { 
       console.log(jsonData); 
      } 
     }); 

    } else { 
     alert('Your browser is not yet supported. Please upgrade to either Google Chrome or Safari.'); 
    } 
} 

fetchData(); 

konsol günlükten ben URL dizesi olarak doğru hesaplanır görebilirsiniz: konsolda ikinci çizgidir Ancak http://weatherapp.dev/cache_gen.php?location=PL4

: Failed to load resource: the server responded with a status of 404 (Not Found).

Bu yolla beni doğru yöne yönlendiren var mı? 19/01/2013 23:15

Eh, ben sadece o yüzden dönüştürdüğünüz

GÜNCELLEME mükemmel $.ajax kullanarak dokümanları uyuyor. Ayrıca bir başarısızlık olayı ekledim ve iletilen tüm verileri kaydettim. Bu benim konsol şu bilgileri veriyor sonra

var fetchData = function() { 

    if (Modernizr.localstorage) { 

     var api_location = "http://weatherapp.dev/cache_gen.php"; 
     var user_location = "PL4"; 
     var date = new Date(); 

     var url = api_location + '?location=' + user_location; 

     console.log(url); 

     jQuery.ajax({ 
      type: "GET", 
      url: api_location + '?location=' + user_location, 
      dataType: "json", 
      success: function(jsonData) { 

       console.log(jsonData); 
      }, 
      error: function(jqXHR, textStatus, errorThrown) { 
       console.log('textStatus: ' + textStatus); 
       console.log('errorThrown: ' + errorThrown); 
       console.log('jqXHR' + jqXHR); 
      } 
     }); 

    } else { 
     alert('Your browser is not yet supported. Please upgrade to either Google Chrome or Safari.'); 
    } 
} 

fetchData(); 

: Ben JSON beslemesi için başlıkları güncel, ve yem kesinlikle geçerli JSON hizmet veren sağladık

http://weatherapp.dev/cache_gen.php?location=PL4 
download_api.js:44textStatus: parsererror 
download_api.js:45errorThrown: SyntaxError: JSON Parse error: Unable to parse JSON string 
download_api.js:46jqXHR[object Object] 

(etkili bir 3rd önbelleğe API'da maliyet tasarrufu için parti hizmeti feed'i). Gerçek işlev kullanım

+0

http://weatherapp.dev/cache_gen.php?location=PL4 çalışan bir url değil.<----- tıklayın – Popnoodles

+0

@popnoodles, bir '/ etc/hosts' yönlendirme olabilir :). Ama, kesinlikle '.dev 'balıkçıl – Alexander

+0

.dev bir gelişim alanıdır. Bunu, yerel sistemimde bir Apache sanal-barındırıcısına sahip olarak ayarlamış bulunuyoruz. Bu, düzgün bir şekilde çözülmesini sağlamak için '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'bir girişe sahiptir Bu alana tarayıcımda, JS dosyasının yüklenmekte olduğu alan adıyla erişebiliyorum. –

cevap

5

bu hatayı görülmesinin nedeni: JSON geçersiz olduğu

http://weatherapp.dev/cache_gen.php?location=PL4 
download_api.js:44textStatus: parsererror 
download_api.js:45errorThrown: SyntaxError: JSON Parse error: Unable to parse JSON string 
download_api.js:46jqXHR[object Object] 

mi. Bir yanıt sunucudan doğru bir şekilde geri dönerse bile, eğer dataType 'json' ise ve döndürülen yanıt doğru biçimlendirilmiş JSON değilse, jQuery error function parametresini çalıştırır.

http://jsonlint.com JSON dizenizin geçerliliğini doğrulamak için gerçekten hızlı ve kolay bir yoldur.

+0

Tekrar teşekkürler Adam. –

+0

@ Adam'ın iyi yanıtını genişletme. Daha genel olarak, çağrıdaki '' datatype '' değeri (açık veya zımni) ile sunucudan döndürülen gerçek veriler arasında bir şey uyuşmaz. Veri türüm olarak "html" belirtiyordum ve bu hatayı aldım. İsteğe bağlı veri tipi parametresini atladım ve hatayı görmeyi bıraktım. Kesinlikle html döndürüyorum ve sayfaya giriyorum ama ajax tanrıçalarına boyun eğmeye istekliyim ve dönüş değerinin benim aradığım sürece istediği herhangi bir tür olduğunu düşünmesine izin verdim. –

0

atın:

http://api.jquery.com/jQuery.getJSON/

Sen $.ajax olduğu gibi $.getJSON içine nesne parametresine geçemez, kod aşağıdaki gibi görünmelidir:

jQuery.getJSON('api_location + '?location=' + user_location) 
     .done(function() { 
      //success here 
     }) 
     .fail(function() { 
      //fail here 
     }); 

için belki Biraz daha açık, $.getJSON{type:'get',dataType:'JSON'} ile sonunda $.ajax çağıran bir "sarıcı işlevi" dir. Bunu, yukarıda verdiğim bağlantıda görebilirsiniz.

+0

Aslında OP için .getJSON yerini almak için sadece daha kolay .ajax – Popnoodles

+0

@popnoodles neden? OP, $ .getJSON 'un zaten – charlietfl

+1

@charlietfl içermediği herhangi bir seçeneği kullanmıyor çünkü kodlarını kullanmış olmalıymış gibi yazmışlar .ajax - sadece 7 karakteri değiştirmek daha kolay. – Popnoodles

0

Bugün aynı konuya koşuyordum. Benim durumumda, JavaScript under Windows'da ayrılmış bir kelime olan 'location' adında bir değişkene bir JSON nesnesi ataıyordum ve görünüşe göre windows.location için bir shorthand var! Böylece tarayıcı, eklenmiş [object% 20Object] ile mevcut URL'ye yönlendirildi. Aynı şey size gerçekleşirse, basit bir şekilde 'konum' dışında bir değişken adı kullanın. Umarım bu birisine yardım eder.