2012-12-10 64 views
1

如果我有一个变量需要发布到PHP脚本而不刷新页面。 这可能吗?如果是这样,怎么样?如何将JavaScript数据发布到PHP?

我使用jQuery的尝试:

$.ajax({ 
    url: "myphpfile.php", 
    type: "post", 
    data: json/array/whatever, 

    success: function(){ // trigger when request was successfull 
     window.location.href = 'somewhere' 
    } 
    }) 

我怎么会收到我的PHP脚本传递一个数组?

+2

那么是什么问题?你正在使用ajax,你在正确的轨道恭喜。 – Jonathan

+0

看看你的$ _POST – danronmoon

+0

那么,这里有什么问题?你真的*试过*你有的代码吗? –

回答

1

使用GM_xmlhttpRequest()来允许跨域帖子(它将在大多数情况下)。

的Greasemonkey脚本:

// ==UserScript== 
// @name  _Sending arbitrary data, demo 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @grant GM_xmlhttpRequest 
// ==/UserScript== 

var someArray  = [1, 2, 3]; 
var serializedData = JSON.stringify (someArray); 

GM_xmlhttpRequest ({ 
    method:  "POST", 
    url:  "http://SERVER.COM/PATH/ShowJSON_PostedData.php", 
    data:  serializedData, 
    headers: {"Content-Type": "application/json"}, 
    onload:  function (response) { 
        console.log (response.responseText); 
       } 
}); 


ShowJSON_PostedData.php:

<?php 
    echo '<title>JSON data</title>'; 

    echo '<h2>JSON post data:</h2><pre>'; 

    $jsonData = json_decode($HTTP_RAW_POST_DATA); 
    print_r ($jsonData); 

    echo '</pre>'; 
?> 


控制台。将显示:

<title>JSON data</title><h2>JSON post data:</h2><pre>Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
) 
</pre> 
+0

...什么?你没有提供'GM_xmlhttpRequest'的代码,只是用法,OP没有提及任何有关跨域(在大多数情况下通常不*)的内容,而且Greasemonkey脚本几乎不需要用户友好的东西。 – ceejayoz

+1

@ceejayoz,'GM_xmlhttpRequest'是一个***标准的*** Greasemonkey函数(现在链接)和**这是一个Greasemonkey问题!**并且,是的,大多数这样的场景***是***跨域。如果OP控制服务器,GM脚本目标页面处于打开状态,则他不会问“我将如何接收通过我的PHP脚本传递的数组”。他也不需要使用GM脚本。现在请删除您的错误downvote。 –

0

该线程的接受的答案可能是真的有用,因为它显示了一个简单的例子:using jquery $.ajax to call a PHP function

我的建议是:做一些工作,然后逐渐增加复杂性,直到你达到你的自定义案件。这样,你感到更安全,并且当他们进入时意识到潜在的问题。

要从PHP传递数组到客户端,您可以在您的php脚本中使用echo json_encode($myArray);

希望这有助于

+2

任何原因的投票和建议,使其更好?谢谢 ! –

+1

@community在downvote之前拥有一个必填字段将会非常棒。请有人向我展示一个案例,其中您认为答案很糟糕,但无法解释原因。 –