Farklı Liman jQuery Ajax

5 Cevap php

Benim ajax çağrı port 8080 ise port 80 (varsayılan bağlantı noktası) bulunan My php dosyası.

Port 8080 My index.html

$(document).ready(function(){
$.get("userCheck.php", 
        {"username" : "lazy", "favcolor" : "FFFFFF" },          
        function(data){ alert("Data Loaded: " + data);
});

Benim PHP

$user = $_GET["username"];
if($user == "lazy")
    echo "SUCESS";
else
    echo "FAIL";

Ben Abit googled var, JSONP çoğunlukla dışarı çıktı. Nasıl JSONP dönüştürmek için herhangi bir fikir?

O iş yapmak için herhangi bir şekilde?

5 Cevap

Bir JSONP hizmetini gerçekleştirme gerçekten basit, ihtiyacınız olan sadece bir callback parametresini GET ve sonunda, argüman olarak JSON veri ile bir işlev çağrısı için eşdeğer içeren bir dize yazdırmak:

$callback = $_GET["callback"];
$user = $_GET["username"];

if($user == "lazy") {
  $response = array("message" => "SUCESS");
} else {
  $response = array("message" => "FAIL");
}

echo $callback . "(". json_encode($response) . ");";

Sonra jQuery ile kullanabilirsiniz $.getJSON yapabilirsiniz:

$.getJSON("jsonpTest.php?callback=?", { username: "lazy"}, function(json){
  alert("JSON Data: " + json.message); // SUCCESS
});

Sen (http://myserver:[port]/userCheck.php) bir port numarası ile tam bir URL oluşturmayı deneyin, ama it won't work olabilir. (Same origin policy)

Farklı bir port üzerinde bir sorgu gerçekleştirme herhangi bir iyi JSONP çerçeve, bloke olur (ya da en azından olması gerektiği) çünkü, için JSONP kullanmanız gereken bir şey değildir. Bu uygulama sadece bir yan etkisi var, bunları sağlamak için JSONP birincil amaç değil.

Ama daha sonra farklı bir URL'ye sorgusu gerçekleştirir ve değerini döndürür index.html olarak aynı port üzerinde bir "facade" PHP script oluşturabilirsiniz. Bu şekilde tarayıcı gerçek URL hakkında bilmiyor.

index.html (8080) <--> myAjaxFacade.php (8080) <--> userCheck.php (80)

Örneğin, http-post-fields işlevini kullanabilirsiniz Bunu yapmak için.

Example:

$(document).ready(function(){
$.get("myAjaxFacade.php", 
    {"username" : "lazy", "favcolor" : "FFFFFF", 
     "realUrl": "http://serverwithdifferent:port/userCheck.php" },          
    function(data){ alert("Data Loaded: " + data);
});

$_POST['realUrl'] için myAjaxFacade.php sonra ileriye diğer tüm POST veri ve bu URL'den yanıtı döndürebilir.

çünkü same origin policy o yapamaz. Portu farklı olduğundan aynı kökenli ilke uygulamak ve XHR çağrıyı engellemek olacaktır.

Bu tür şeyler yapmak için bir proxy kullanmak gerekir, size JsonP bakmak veya kıvrılmasını kullanarak kendi Proxy kurmak veya aynı bağlantı noktası için kodunuzu kopyalayabilirsiniz.

Same Origin Policy (SOP) o indirilen bir daha herhangi başka bir ana bilgisayar ve bağlantı istekleri göndermesini Javascript yalanladı.

Ne bu çözüm için gerekli olan fiili hizmet isteklerini ileten javascript kökeni olarak aynı ana ve bağlantı noktası üzerinde çalışan bir programı. Böyle davranan bir program yaygın bir proxy denilen, yani ne gerekli bir JSONP proxy olur.

Sunucu ruby/rails and sinatra çalışıyorsa, github.com/greenisus/jsonp-proxy minimal çözüm olacaktır. Birçok özellik olacaktır gibi görünüyor PHP için bir benalman.com/projects/php-simple-proxy/.

PHP JSONP için, örneğe bakın here. Sen çalıştırmak için bir işlev adı belirterek URL için bir "geri" parametresini ekleyin ve PHP kodu veri ile geri olduğunu aramak JavaScript yayarlar emin olun. jQuery içeriği ile bir komut dosyası öğesini enjekte - çalıştırıldığında bu geri arama çağırır.