Ne bir PHP jQuery AJAX isteği geri vermek için üretmek gerekir?

5 Cevap php

Belki de bir sözdizimi hatası, ama varsayalım asla. Ben kurmak-ölü basit AJAX test var:

http://www.mcphersonindustries.com/bucket/api.php sadece bir dosyadır:

<?php echo "test"; ?>

Ve ben bu jQuery biraz çalışırken localhost olarak Apache var:

$(document).ready(function() {

function doAjaxPost() {  
    $.ajax({  
       type: "POST",  
       url: "http://www.mcphersonindustries.com/bucket/api.php",  
       data: "null",  
       success: function(resp){   
           console.log("Response: '" + resp + "'");  
       },  
       error: function(e){  
           console.log('Error: ' + e);  
       }  
    });  
}  

doAjaxPost();

});

Yani Kundakçı Response: '' her zaman dışarı tükürüyor, ama hiçbir şey isteği ile geliyor. PHP bir başlık ilan gerekir mi? Ben bir yere bir boneheaded hata mı yapıyorum?

Her zaman olduğu gibi anlayışlar, için teşekkürler.

5 Cevap

Size yetki bu etki olmadan cross-site AJAX yapamaz:

http://ejohn.org/blog/cross-site-xmlhttprequest/

Sizin örnekte senin Javascript XML veya HTML geri bekliyor. Sen dataType parametresini belirterek, ancak bu konuda açık olabilir. Size dönmek istiyorum ne mi? Eğer öyleyse, PHP yapmalıdır:

<?php
echo '<p>hello world</p>'; // "text/html" is implied
?>

Ayrıca, ben neden yerine küresel daha hazır belgenin içindeki fonksiyonunu tanımlayan emin değilim. Belki de bu bir sorundur.

Genellikle insan yerine JSON dönmek istiyorum, bu durumda bu gibi görünmelidir:

<p>What is your name?</p>
<input type="text" id="name">
<input type="button" id="send" value="Send">

ile

$(function() {
  $("#send").click(doAjaxPost);
});

function doAjaxPost() {
  $.ajax({
    type: "POST",
    url: "http://www.mcphersonindustries.com/bucket/api.php",  
    data: {
      name: $("#name").val()
    },
    dataType: "json",
    success: function(resp) {   
      alert(resp.result);
    },  
    error: function(e){  
      console.log('Error: ' + e);  
    }
  });
}

ve PHP:

<?php
header('Content-Type: application/json');
$name = $_POST['name'];
$out = array('result' => 'Hello, ' . $name);
echo json_encode($out);
?>

Tek bir dize, sayı veya boolean Eğer, olabilir, sadece echo bunu PHP komut. O (bir şeylerin dizi veya hiyerarşik veri gibi) daha karmaşık bir türü varsa, JSON bunu aktarmanın en hafif yoludur.

Genellikle sadece bir PHP dizi veya nesne almak ve bir argüman olarak onunla echo json_encode() arayabilirsiniz.

Sadece senin karma dataType: 'json' eklemek ayrıştırmak için.

Eğer aynı ana komut dosyası çalıştırmak, ya da başka bir konumdur yok. Davayı şu varsa, JSONP yöntemi kullanmak gerekir. Bu yöntem, çapraz etki alanı işlev çağrıları oluşturmanıza olanak sağlar.

JSONP süreçte, çağıran javascript bir işlev için benzersiz bir ad oluşturur ve bir olsun isteği ile çağıran komut dosyasına bu gönderir. php script bu isimde bir değişken ile, bir javascript dosyası oluşturur ve bu içerir ve script bu parça yürütür istemciye döndürür.

Bir tahmin, jquery text / html olarak HTTP cevap başlığında Server gelen veri türü kaynaklanan çünkü belki olabilir, ama gerçek değeri html değildir.

Bir streç gibi görünüyor, ama bu i ile gelip hepsi bu!