【问题标题】:page A post values to page B that makes another post to page C using cURL and return response back to page A页面 A 向页面 B 发布值,该页面 B 使用 cURL 向页面 C 发布另一个帖子并将响应返回到页面 A
【发布时间】: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


【解决方案1】:

问题出在 jQuery AJAX 插件中,我更改了声明 AJAX 函数的方式,现在它可以正常工作了。请参阅本文代码中的 EDIT 和 CHANGED 部分以获取正确的代码。

感谢cmets,帮了大忙!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多