首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能从jQuery/AJAX调用这个PHP文件?

问为什么我不能从jQuery/AJAX调用这个PHP文件?
EN

Stack Overflow用户
提问于 2016-04-12 20:10:57
回答 1查看 254关注 0票数 0

我用PHP编写了这段代码(路径:../wp-content/plugins/freework/fw-freework.php)

代码语言:javascript
复制
<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被调用(它在显示警报和正确检索数据时工作):

代码语言: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文件(成功函数中的警报和console.log未被调用/无法访问)。

代码语言:javascript
复制
<?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/Bootstrapp ecc...都包含在主html文件和HTML生成器PHP文件中(工作正常)。

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

编辑:我用一种全新的方法解决了这个问题!我离开了jQuery,我将在每次有人提交表单时对页面进行充电,我将通过POST在生成超文本标记语言的同一文件中检索数据。为什么我不能从javascript调用服务器?坦率地说,我不知道。在其他情况下,它总是有效的。不管怎样,谢谢你们。

EN

回答 1

Stack Overflow用户

发布于 2016-04-12 20:17:54

这就是你的问题:

代码语言:javascript
复制
$.ajax({
    type: 'POST',
    url: ajaxphp,
    async: true,
    dataType: 'json',
    ^^^^^^^^^^^^^^^^ Wrong data type

然后你就可以做到:

代码语言:javascript
复制
<?php
// HTML Page -> JavaScript -> fw-ajaxphp.php -> XML Vocabulary

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

您正在指定返回的数据类型为json。然而,在你的php脚本中,你正在回显字符串,所以你的ajax调用将会失败,因为jQuery不能将返回的数据解析为json。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36572874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档