【发布时间】:2013-12-09 19:55:21
【问题描述】:
我正面临一个对我来说非常新的情况。我会尽量让事情简单解释一下 一步一步来。
1)在页面 A(用户表单)中,我从字段中获取一些值并将其作为 jQuery AJAX POST 发送到页面 B。这是主要的代码段,它工作正常:
$(document).ready(function() {
var options = {
target: '#my-container',
dataType: 'html',
beforeSubmit: showRequest, // pre-submit callback
success: processOK, // post-submit callback
error: processError,
clearForm: false
};
// bind form using 'ajaxForm'
$('#myForm').ajaxForm(options);
});
我在表单定义中直接定义了“url action”和“method as POST”。
2) 页面 B 正确地接收来自页面 A 的 POST 值,并使用它对页面 C 进行另一个 POST,但这次使用 cURL。此时,一切仍按预期工作。我可以阅读 B 页中的响应,这很好。代码如下:
页面 B 代码:
<?php
$cURL = curl_init('http://200.201.194.133/exampleurl/MakeCall.php');
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
$dados = array(
'type' => '0',
'dest' => $_POST["dest"],
'content' => $_POST["content"],
'priority' => '-1',
'return' => '1',
'answer' => '40',
'ringtime' => '26',
'psid' => 'ct1253117',
'ctid' => '9'
);
curl_setopt($cURL, CURLOPT_POST, true);
curl_setopt($cURL, CURLOPT_POSTFIELDS, $dados);
$result = curl_exec($cURL);
curl_close($cURL);
echo "<span class='response'>OK</span>";
?>
3) 问题来了,当页面 B 收到来自页面 C 的响应时,它会在浏览器中显示响应,我需要将此响应发送到页面 A,其中 a 可以在 de jQuery AJAX 回调函数中捕获它.页面 A(用户的表单)需要一直可见。
在寻求帮助之前,我整天都在尝试解决这个问题。因此,如果有人可以帮助我解决这种情况,我将非常高兴。也欢迎替代解决方案。
EDITED:(原来的功能——这样不行,不知道为什么,还加上了“return false”这行)。
$(document).ready(function() {
var options = {
target: '#my-container',
dataType: 'html',
beforeSubmit: showRequest, // pre-submit callback
success: processOK, // post-submit callback
error: processError,
clearForm: false
};
// bind form using 'ajaxForm'
$('#myForm').ajaxForm(options);
});
改为:(现在可以了——注意“return false;”这行,这很重要)
$("#myForm").submit(function(e)
{
var formURL = $(this).attr("action");
$.ajax(
{
url : formURL,
type: "POST",
success:function(data, textStatus, jqXHR)
{
alert("success");
alert(data);
},
error: function(jqXHR, textStatus, errorThrown)
{
alert("fail");
}
});
//STOP default action
return false;
});
$("#myForm").submit();
【问题讨论】:
-
这意味着您的表单提交处理程序不会阻止默认提交操作,因此页面会完整回发到页面 b,然后页面 b 获取并返回页面 c 的内容。根本没有使用 ajax。
-
如果响应显示在浏览器中,我认为问题存在于您来自 PageA 的 javascript。看起来您正在使用 jQuery 表单插件;我之前在配置这个插件时遇到过问题。您是否还有同样的问题是您忽略了表单插件 [api.jquery.com/jQuery.ajax]?
-
在提交表单之前,按 Ctrl+shift+j 打开控制台(在 IE 中为 F12)并重新加载页面。您在错误控制台中看到任何错误吗?
-
感谢 cmets。一旦我可以测试这个答案,我会给出反馈。
-
谢谢大家,你们都帮我解答了部分问题。我刚刚用解决方案更新了我的帖子。
标签: javascript php jquery ajax curl