PHP sunucudan JSON veri yanıtı boş

2 Cevap php

Ben bu bir sergiyi bir sabit zaman yaşıyorum. Olursa olsun deneyin, ne gibi PHP her zaman boş bir dizi dönen biter görünüyor. İşte benim ana dosya (index.php) kod var:

<script language="javascript" type="text/javascript">

$(document).ready(function(){

  $(".ajaxlink").click(function() {
    callServer();
    return false; //Stop link from redirecting
  });

});

var test = { "testName": "testValue" }
var testJSON = JSON.stringify(test);

function updatePage(data) {
  document.getElementById("testDiv").innerHTML = data;
}

function callServer() {
 $.ajax({
   type: "POST",
   url: "ajax/server.php",
   data: testJSON,
   success: function(data) {
     updatePage(data);
   },
   //Upon error, output message containing a little info on what went wrong
   error: function (XMLHttpRequest, textStatus, errorThrown) {
     alert('An Ajax error occured\ntextStatus = ' + textStatus + '\nerrorThrown = ' + errorThrown + '\nstatus = ' + XMLHttpRequest.status);
   }
 });
}

</script>

<div id="testDiv">Something here</div>

<a href="test1.htm" class="ajaxlink">Link!</a> <br>

Eğer "Bağlantı!" Tıkladıklarında Bu temelde CallServer () fonksiyonunu çalıştırır. Server.php için: Bu o {"TestValue" "TestName"}, bu test json veri gönderir. Kundakçı json veri gerçekten server.php gönderilen olduğunu bildirdi.

Benim server.php bu gibi görünüyor:

<?php

print_r($_POST);

?>

Bu testDiv de aşağıdaki döndürür:

Array
(
)

. Ajax fonksiyonunda veri türü tanımlı değil, bu yüzden server.php dosya tükürür ne çıktı, bu okunabilir olmalıdır. Gerekli tüm kütüphaneler (json, jquery) hem de benim belgeye dahil edilmiştir. Ben Apache 2.2 ve PHP 5.3.1 Bu koşuyorum, ama bu (web sitelerinin binlerce için bir ev sahibi olan) benim webserver aynı gösterir. Istek başlığında kullanılan içerik türü 'application / x-www-form-urlencoded olup; charset = UTF-8 'o düzgün çalışmalıdır yani.

Thanks for your time. Best regards soren

2 Cevap

Ben yanlış bir şekilde veri göndermek düşünüyorum. Eğer testName=testValue gibi bir dize göndermek veya test, doğrudan .ajax() ve data parametre ve kullanmayın değeri atamak ya stringify yöntemi.

Çünkü, stringify, gerçek gönderilen veriler (ben burada emin değilim, varsayalım) olacak kullanıyorsanız:

'{ "testName": "testValue" }'

ama bu geçerli bir parametre dizesi değil.

Bu biçimde olmalıdır

'testName=testValue'

Yani .ajax() uygun bir dizeye nesneyi dönüştürür, test doğrudan kullanın:

function callServer() {
 $.ajax({
   type: "POST",
   url: "ajax/server.php",
   data: test,
   success: function(data) {
     updatePage(data);
   },
   //Upon error, output message containing a little info on what went wrong
   error: function (XMLHttpRequest, textStatus, errorThrown) {
     alert('An Ajax error occured\ntextStatus = ' + textStatus + '\nerrorThrown = ' + errorThrown + '\nstatus = ' + XMLHttpRequest.status);
   }
 });
}

Ben PHP komut çıktı JSON biçimlendirilmiş olduğundan emin değilim.

PHP yeni bir sürümünü (sen hangi) kullanıyorsanız eğer json_encode ve json_decode işlevlerine erişebilirsiniz. Bunu yapmak yerine:

print_r($_POST);

Deneyin:

print json_encode($_POST);

PHP sürümünüz bu işlevleri yoksa bunları çıktısı önce JSON PHP değişkenleri kodlamak için, bu tür Zend Framework Zend_Json sınıf olarak bir kütüphane kullanabilirsiniz.

Geri geldiğinde, bu JSON biçimli bir dize olacak. Lütfen jQuery.ajax çağrısında dataType Ayarlama JS nesnesine bunu değerlendirmek gerekir. Eğer değilse bunu JavaScript eval işlevini çağırmak zorunda, ya da (tercihen) JSON.parse (veri) kullanmak istiyorsunuz ya.