Отправить данные с помощью jsonp onclick - PullRequest
1 голос
/ 09 декабря 2011

Я пытался понять, как использовать jsonp в моей ситуации, но не повезло.Это подсчитывает количество кликов и при каждом щелчке записывает имя и местоположение в текстовый файл.

<script>
var count1 = 0;
function countClicks1() {
count1 = count1 + 1;
document.getElementById("p1").innerHTML = count1;
}
function doAjax()
$.ajax({
   type: "POST",
   url: "phpfile.php",
   data: "name=name&location=location",
    success: function(msg){
     alert( "Data Saved: " + msg );
   }
 });
}

document.write('</p>');
document.write('<button onclick="countClicks1(); doAjax();">Count</button>');
document.write('</p>');
document.write('<p id="p1">0</p>');
</script>

Это php-файл phpfile.php

<?php
$name = $_POST['name'];
$location = $_POST['location'];
$myFile = "test.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $name);
fwrite($fh, $location);   
fclose($fh);
?>

Если эти два файлана этом же домене все нормально.Но если я хочу сделать то же самое для другого домена, это не сработает.Я хотел бы отправить ту же информацию с jsonp на phpfile.php.Я знаю, это должно быть с GET, но я просто не могу понять, как.

1 Ответ

1 голос
/ 09 декабря 2011

Прежде всего, ваш php-файл ничего не выводит, поэтому я бы вообще не называл этот JSONP.JSONP - это метод получения данных JSON с использованием запроса GET, который возвращает фрагмент Javascript, который можно загрузить с помощью тега <SCRIPT>.

Для самостоятельного выполнения JSONP вам нужно будет выполнить что-то вроде этого:

<?php
$callback = $_GET['callback'];
$name = $_GET['name'];
$location = $_GET['location'];
$myFile = "test.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $name);
fwrite($fh, $location);   
fclose($fh);
header("Content-Type: application/javascript");
?>

<?php echo $callback; ?>("Message from the server");

Затем выполните вызов примерно так:

$.getJSON("http://server/phpfile.php?name=FOO&location=BAR&callback=?",
          function(message) {
              alert(msg);
          });

НО ... Поскольку вы фактически не возвращаете никаких данных с сервера, выс таким же успехом можно просто подделать изображение с правильным URL.Это значительно уменьшило бы накладные расходы.

...