【问题标题】:Why can't I call this PHP file from jQuery/AJAX?为什么我不能从 jQuery/AJAX 调用这个 PHP 文件?
【发布时间】:2016-04-12 12:10:56
【问题描述】:

我在 PHP 中有这段代码(路径:../wp-content/plugins/freework/fw-freework.php)

<div id="new-concept-form">
        <form method="post" action="../wp-admin/admin.php?page=FreeWorkSlug" class="form-inline" role="form" onsubmit="addNewConcept()">
            <div class="form-group">
                <label for="new_concept_text">Nuovo concetto:</label>
                <input type="text" class="form-control" id="new_concept_text">
            </div>
            <div class="form-group">
                <label for="new_concept_lang">Lingua:</label>
                <select class="form-control" id="new_concept_lang">
                    <option>it</option>
                    <option>en</option>
                    <option>de</option>
                    <option>fr</option>
                </select>
            </div>
            <button type="submit" class="button-aggiungi btn btn-default">Aggiungi</button>
        </form>
    </div>

当按钮被按下时,这个 javascript 被调用(它在显示警报和正确检索数据时工作):

var ajaxphp = '../wp-content/plugins/freework/fw-ajaxphp.php';

function addNewConcept()
{
conceptName = document.getElementById('new_concept_text').value;
lang = document.getElementById('new_concept_lang').value;

alert('Inserting: ' + conceptName + " " + lang);

$.ajax({
    type: 'POST',
    url: ajaxphp,
    async: true,
    dataType: 'json',
    data: {conceptNm : conceptName, conceptLang : lang },
    success: function() {
        alert("--------------------------------  Data sent!!");
        console.log("--------------------------------  Data sent!!");
    }

});

return true;
}

现在,正如您在javascript中看到的那样,我想通过ajax调用另一个PHP文件(成功函数中的alert和console.log没有被调用/无法访问)。

<?php
// HTML Page -> JavaScript -> fw-ajaxphp.php -> XML Vocabulary

echo 'alert("PHP called")';
// echo $_POST['conceptNm'];
// TODO change vocab when done testing
$xml_file = '../wp-content/plugins/freework/fw-custom-vocabulary-test.xml';

$xml_vocab = new DOMDocument;
if (isset($_POST['conceptNm']) && isset($_POST['conceptLang']))
{
    // ADD NEW CONCEPT
    echo 'alert("PHP chiamato")';
    // irrelevant business code here...
    echo 'alert("Modifica avvenuta")';
}
?>

JQuery/Bootstrap ecc... 都包含在主 html 文件和 HTML 生成器 PHP 文件中(正常工作)。

然而,我似乎无法调用这个包含所有服务器逻辑作为对按钮的响应的 php 文件。业务代码无关紧要,因为按钮触发器至少应该在 if 条件之外调用警报。 我已经关注了与此问题相关的堆栈溢出的所有答案,但它不起作用。我还尝试添加变量的完整路径,但没有。如您所见,我所有的文件都在这个文件夹中:Files on Server。 那么为什么我不能调用那个服务器端的 PHP 脚本呢? 谢谢。

编辑:我使用一种全新的方法解决了这个问题!我离开了 jQuery,每次有人提交表单时我都会为页面重新充电,我将通过 POST 在生成 HTML 的同一文件中检索数据。为什么我不能从 javascript 调用服务器?坦白说,我不知道。在其他情况下,它一直有效。总之谢谢大家。

【问题讨论】:

  • ajaxphp不应该是'./wp-content/plugins/freework/fw-ajaxphp.php';吗?
  • 调试时会发生什么?是否进行了 AJAX 调用?服务器的响应是什么?
  • @MattWebb 那是一个包含路径的变量。 Marko,你有什么回应吗?从控制台检查。
  • 您需要养成accepting answers 的习惯,它可以帮助您解决问题。您将获得积分,并鼓励其他人帮助您。
  • @MattWebb 没有两点是正确的。

标签: javascript php jquery ajax wordpress


【解决方案1】:

这是你的问题:

$.ajax({
    type: 'POST',
    url: ajaxphp,
    async: true,
    dataType: 'json',
    ^^^^^^^^^^^^^^^^ Wrong data type

然后你做:

<?php
// HTML Page -> JavaScript -> fw-ajaxphp.php -> XML Vocabulary

echo 'alert("PHP called")';
...

您指定返回的数据类型为 json。但是,在您的 php 脚本中,您正在回显字符串,因此您的 ajax 调用将失败,因为 jQuery 无法将返回的数据解析为 json。

删除dataType 行应该可以解决您的问题,但请注意,您不能将返回的数据用作对象。但这在这个特定示例中并不重要,因为您根本没有使用返回的数据。

【讨论】:

  • 在这种情况下没关系,因为他没有通过success() 方法处理返回的PHP。
  • @Marcus 这无关紧要,jQuery 仍然会在指定数据类型时尝试解析结果。
  • 不,这不是问题。无论如何,我通过使用一种全新的方法解决了这个问题,正如您在我的回答中看到的(或者很快就会看到)。无论如何,我还是谢谢你们。
  • @jeroen - 这不是无关紧要的。呼叫仍然会以dataType: 'json' 触发,没问题。唯一的问题(OP 不关心)然后能够在 success 方法中操作返回数据。随意尝试一下。在他的情况下,ajaxphp URL 仍在触发并执行其设计的任务。它只是不会发回响应,因为它没有以 JSON 格式格式化。虽然没有错误。但我猜这足以让你回去并否决我的旧帖子?妈。让我休息一下。
  • @Marcus 是的,调用会触发,但您不会在成功函数中结束,而是在 fail / error 处理程序中结束。不幸的是,我现在无法设置测试用例。而且我没有对您的任何帖子投反对票;当这种情况发生时我讨厌它......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多