我尝试在我的JavaScript中收到PHP响应。
我的PHP看起来像这样:
some code
if(...) echo"1";
else echo"2";
JavaScript:
function GetChoice() {
var returned="";
$.ajax({
async: false,
cache: false,
url:"http://mydomain.com/script.php",
type:"POST",
dataType:"text",
success: function(data) {
returned = data;
}
});
return returned;
}
var r = GetChoice();
alert(r);
但是GetChoice()不返回任何内容。 怎么了?
UPD:如果javascript和php脚本位于同一服务器上,则可以使用。 我的脚本位于不同的域。
如果您使用Firefox Firebug,则可以在"网络"选项卡中检查是否收到任何Ajax响应
将您的真实php代码发布到您检查$ _POST参数的位置
为什么要使用绝对路径? 是来自同一台服务器吗?
是的,它在另一台服务器上。
如果使用FF或Chrome,则可以使用开发工具,然后查看服务器返回的响应。 $ .ajax应该在开发者工具(Chrome)的"网络"标签中记录一个请求。 单击请求,然后单击响应以查看服务器发回了什么。 也许您的服务器没有发回任何东西?
尝试这个 :
temp1.php
function GetChoice() {
var returned ="";
$.ajax({
async: false,
cache: false,
type:"POST",
url:"http://localhost/temp2.php",
data: { name:"John"}
}).done(function( msg ) {
returned = msg;
});
return returned;
}
var r = GetChoice();
alert(r);
temp2.??php
echo $_REQUEST["name"];
?>
它的工作....!
这仅起作用,因为本地主机是示例中的域,并且两个脚本都在该域上运行。 OP说他们的脚本位于两个不同的域。 PHP脚本将需要在任何输出之前添加额外的标题... header(Access-Control-Allow-Origin:*);另外,在此示例中,temp1.php不是PHP,它的HTML调用了javascript资源。朱斯·萨恩(Jus sayn)。
在您的示例中,问题在于$ .ajax立即返回,而下一个语句返回result;在您甚至调用了作为成功回调传递的函数之前执行。
这是解释。
如何从异步调用返回响应?
运气,
现在是2018年,现在确实应该接受这个答案。
尝试这个:
function GetChoice() {
var returned ="";
$.ajax({
async:false,
cache:false,
url:"http://mydomain.com/script.php",
type:"POST",
dataType:"text",
success:function (data) {
alert(data);
}
});
}
我敢打赌,它什么也不会提醒
警报没有工作。
"辛勤工作"不是真正的建设性的。
它什么也没显示。警报未打。
可能是跨域问题
我该如何解决呢?我想在domain2.com网站上的javascript中在domain1.com上接收表单php脚本。
如果这是跨域问题,请确保您的PHP脚本通过添加标头(Access-Control-Allow-Origin:*)来知道这一点。在PHP脚本中的任何输出之前。
这是脚本
$.ajax({
async:false,
cache:false,
url:"http://path.com/to/file",
type:"POST",
dataType:"html",
data: 'data',
success: function(data){
alert(data);
}
});
并在您的PHP文件中编写此代码
function test()
{
$str = 'This is php file';
return $str;
}
echo test();
?>
确保php文件的路径正确,并将脚本添加到另一个PHP文件中。基本上,您需要2个文件。刚刚在我的编辑器中对此进行了测试,并且可以工作..
在成功运行回调之前,GetChoice()将不返回任何内容。
回调是您定义为成功参数的函数,直到从服务器请求数据后才会触发。
这是异步的(AJAX中的A),因此代码的其余部分继续导致GetChoice()函数在运行回调之前返回
除了他已经使用async: false指示其同步调用
公平点-我错过了!