JSON nesne max boyutu?

4 Cevap php

Jquery kullanarak, böyle ajax kullanarak sunucuya istemciden json nesneleri göndermek mümkün değilim:

var strJSON = '{"event":[{
    "dates":[
        "2009-10-14","2009-10-15"],
   "teams":[
        {"id":"0","country":"USA","state":"CA","name":"California Polytechnic State University","subteam":""},
        {"id":"1","country":"USA","state":"CA","name":"California State University, Bakersfield","subteam":""},
        {"id":"2","country":"USA","state":"CA","name":"California State University, Fresno","subteam":""},
        {"id":"3","country":"USA","state":"CA","name":"California State University, Fullerton","subteam":""}]
}]}';

$.ajax({
    url: '../ajax/save_event',
    type: 'POST',
    data: { data : strJSON },
    dataType: 'json',
    timeout: 8000,
    cache: false
});

Bu iyi çalışıyor. JSON dize çok daha büyük (tam boy emin, ama bir yerde yaklaşık 5 kat daha büyük değil) alırsa ancak, sunucu tarafından alınan $ _POST veri boştur. Neden bilen var mı?

Apache / PHP / jquery kullanıyorum. IE ve Firefox hem de olur. Ben ayarlamak gerekir bir yerde ayarı bir yapılandırma var mı?

İşte bunu yapmak için başarısız bir dize bir örnek:

{"events":[{"dates":["2009-10-10","2009-10-11","2009-10-12"],"divisions":[{"level":"Collegiate","name":"Varsity","subdivision":"Division I","rounds":[],"teams":[{"id":"0","country":"USA","state":"CA","name":"California Polytechnic State University","subteam":""},{"id":"1","country":"USA","state":"CA","name":"California State University, Bakersfield","subteam":""},{"id":"2","country":"USA","state":"CA","name":"California State University, Fresno","subteam":""},{"id":"3","country":"USA","state":"CA","name":"California State University, Fullerton","subteam":""},{"id":"4","country":"USA","state":"CA","name":"Stanford University","subteam":""},{"id":"5","country":"USA","state":"CA","name":"University of California, Davis","subteam":""},{"id":"6","country":"USA","state":"CA","name":"San Francisco State University","subteam":""},{"id":"7","country":"USA","state":"CA","name":"Lassen Community College","subteam":""},{"id":"8","country":"USA","state":"CA","name":"Menlo College","subteam":""},{"id":"9","country":"USA","state":"CA","name":"Fresno Pacific University","subteam":""},{"id":"10","country":"USA","state":"CA","name":"Bakersfield","subteam":""},{"id":"11","country":"USA","state":"CA","name":"Buchanan","subteam":""},{"id":"12","country":"USA","state":"CA","name":"Campolindo-Moraga","subteam":""},{"id":"13","country":"USA","state":"CA","name":"Fremont-Sunnyvale","subteam":""},{"id":"14","country":"USA","state":"CA","name":"Ponderosa-Shingle Springs","subteam":""},{"id":"15","country":"USA","state":"CA","name":"West Covina","subteam":""},{"id":"16","country":"USA","state":"CA","name":"Gilroy","subteam":""},{"id":"17","country":"USA","state":"CA","name":"San José State University","subteam":""},{"id":"18","country":"USA","state":"CA","name":"University of California, Los Angeles","subteam":""},{"id":"19","country":"USA","state":"CA","name":"Sierra College","subteam":""},{"id":"20","country":"USA","state":"CA","name":"Selma","subteam":""},{"id":"21","country":"USA","state":"CA","name":"Liberty","subteam":""}],}]}]}

Bu json.org 's "stringify" kullanılarak oluşturulmuş bulunuyor:

var strJSON = JSON.stringify(oEvent);

EDIT: Investigating further, I changed the dataType to "text" and tried sending a long string of numbers. It works up until ~3500 characters then chokes (and when I say "choke" I mean that the request arrives at the server with a null $_POST.)

Benim PHP post_max_size 64M, bu yüzden o değil. Birisi Apache httpd.conf değildi "LimitRequestBody" kullanarak önerdi, bu yüzden ona "LimitRequestBody 0" eklenir ve Apache yeniden başlattım. Bu da yardım etmedi.

Başka bir öneriniz??

4 Cevap

Bu muhtemelen sunucunun yapılandırmasına kaynaklanmaktadır. Ayara max_post_size için php.ini kontrol ve veri göndermek için yeterince büyük olduğundan emin olun. Ayrıca web sunucusu ayarlarını kontrol - Apache senin soruna neden olabilecek bir LimitRequestBody direktif var. Son olarak, büyük sonrası herhangi bir hata tetikliyor olup olmadığını görmek için web sunucusu ve PHP hata günlüklerini denetleyin.

Bu sayfayı bulur kimseye işaretçiler sadece bir çift - Ben bir JSON dize kullanarak ayrıştırılması için başarısız ile benzer bir sorunu içine koştu jQuery.parseJSON().

Ben (OP'ın sayısında muhtemelen ilgisiz) Benim sorun aslında bir sokak tek tırnak neden olduğunu söylemek utanıyorum. Bu sorunu çözüldü kaçan. Ben orginally sadece 8000 karakter uzunluğunda JSON dize ile oluyor gibiydi gibi, ilgili dizi uzunluğu olduğunu düşündüm, ama yanlış yerde dize sonlanan başıboş alıntı oldu.

Tim, hiç orijinal konunun altına var olmadığını biliyorum, ama verilen dize yapıştırarak yok:

{"events":[{"dates":["2009-10-10","2009-10-11","2009-10-12"],"divisions":[{"level":"Collegiate","name":"Varsity","subdivision":"Division I","rounds":[],"teams":[{"id":"0","country":"USA","state":"CA","name":"California Polytechnic State University","subteam":""},{"id":"1","country":"USA","state":"CA","name":"California State University, Bakersfield","subteam":""},{"id":"2","country":"USA","state":"CA","name":"California State University, Fresno","subteam":""},{"id":"3","country":"USA","state":"CA","name":"California State University, Fullerton","subteam":""},{"id":"4","country":"USA","state":"CA","name":"Stanford University","subteam":""},{"id":"5","country":"USA","state":"CA","name":"University of California, Davis","subteam":""},{"id":"6","country":"USA","state":"CA","name":"San Francisco State University","subteam":""},{"id":"7","country":"USA","state":"CA","name":"Lassen Community College","subteam":""},{"id":"8","country":"USA","state":"CA","name":"Menlo College","subteam":""},{"id":"9","country":"USA","state":"CA","name":"Fresno Pacific University","subteam":""},{"id":"10","country":"USA","state":"CA","name":"Bakersfield","subteam":""},{"id":"11","country":"USA","state":"CA","name":"Buchanan","subteam":""},{"id":"12","country":"USA","state":"CA","name":"Campolindo-Moraga","subteam":""},{"id":"13","country":"USA","state":"CA","name":"Fremont-Sunnyvale","subteam":""},{"id":"14","country":"USA","state":"CA","name":"Ponderosa-Shingle Springs","subteam":""},{"id":"15","country":"USA","state":"CA","name":"West Covina","subteam":""},{"id":"16","country":"USA","state":"CA","name":"Gilroy","subteam":""},{"id":"17","country":"USA","state":"CA","name":"San José State University","subteam":""},{"id":"18","country":"USA","state":"CA","name":"University of California, Los Angeles","subteam":""},{"id":"19","country":"USA","state":"CA","name":"Sierra College","subteam":""},{"id":"20","country":"USA","state":"CA","name":"Selma","subteam":""},{"id":"21","country":"USA","state":"CA","name":"Liberty","subteam":""}],}]}]}

içine http://json.parser.online.fr/ bu kimseye herhangi bir yardım ise, aşağıdaki hatayı veriyor:

SyntaxError: JSON.parse: expected double-quoted property name

Bir boyut sorunu var gibi ben dize (php dizi kodlanacak) Json dize çıkışı kapalı kıyılmış olur artırmak zaman dize küçük olduğu zaman, benim Json dize her şeyi test çalışır görünüyor.

başarısız dize bir dize uzunluğu yaparken, I (7796) olsun. Bu yüzden de yerine 8M 64M için cli ve apache için ini dosyasında max sonrası seçeneği değişti ve ben hala aynı sorunu alıyorum. Ben php CLI aynı çıktıyı verir çünkü bu sorun apache LimitRequestBody sınırlı olduğunu düşünmüyorum.

Kodlanmış json dize bir var_dump yaparken bunun doğranmış alır ve json etiketleri kapalı alamadım zaman Json dekoder bir null döndürebilir dolayısıyla neden bir şey daha, ben görebiliyorum.

ör

$strJson = file_get_contents('http://mydomain/page');
var_dump($strJson);

Dize kapalı kıyılmış ediliyor ve bir sıfır çıktı sonuna kadar birleştirilmiş nerede göreceksiniz.

'Jsonp' veri türü değil ve POST yöntemi kullanamazsınız. Bunun yerine, tüm verileri bir sorgu dizesinde geçirilir. Sunucunun maksimum sorgu dize uzunluğu aşıldığında Böylece, veri geçirilecek değil. Bunun nedeni, jQuery html belge içine bir düğüm olarak json veri yükler, ve bu sadece bir GET olarak yapılabilir olmasıdır. Eğer daha fazla veri gerekiyorsa XML veya diğer kullanılması gerekecek.