【问题标题】:500 error on javascript, ajax update of MYSQL celljavascript 上的 500 错误,MYSQL 单元的 ajax 更新
【发布时间】:2020-09-16 01:00:37
【问题描述】:

jquery.js?ver=1.12.4-wp:4

POST https://xyz/update.php 500(内部服务器错误)

发送@jquery.js?ver=1.12.4-wp:4

ajax@jquery.js?ver=1.12.4-wp:4 myFunction@6011c7fbf.min.js?ver=1600216310:3 onclick@(索引):453

我从控制台收到 500 错误。我不知道错误是在我的 PHP 中尝试更新行还是其他地方。

PHP 包含在我的 update-file.php 文件中

function function_1() {
    global $wpdb;
$wpdb->query( $wpdb->prepare("UPDATE 'my_table_name' SET `currentstatus` = 'myupdate1' WHERE ID = '1'"));   

}

JAVASCRIPT包含在页面中

function myFunction() {

      jQuery.ajax({
    type: 'post',
    url: '/wp-content/themes/yummy/update-file.php',
    success: function(data){
        // callback function
    }
});
  alert("I've been clicked!!");
}

HTML

去吧!

编辑 1

根据我更新的建议:

JAVASCIPT

jQuery.ajax({
    type: 'post',
    url: my_ajax.ajax_url,
    action: 'function_1',
    success: function(data){
        // callback function
    }
});

认为上述不正确我也尝试过:

jQuery.ajax({
    type: 'post',
    url: my_ajax.https://myurl.com/wp-content/themes/yummy/update-waitinglist.php, // this is the location of the update php below
    action: 'function_1',
    success: function(data){
        // callback function
    }
});

PHP 包含在我的 update-file.php 文件中

add_action('wp_ajax_function_1', 'myfunctionname'); // logged in user can make a call
add_action('wp_ajax_nopriv_function_1', 'myfunctionname'); // non logged in user can make a call

function myfunctionname() {
    global $wpdb;
    $results = $wpdb->query( $wpdb->prepare("UPDATE 'my_table_name' SET `currentstatus` = 'myupdate1' WHERE ID = '1'"));
    die($results);

}

添加到函数文件 wp_localize_script('myfunctionname', 'my_ajax', array('ajax_url' => admin_url('admin-ajax.php')));

使用 EDIT 1 后,我也会收到一个错误 - 注意:wp_localize_script 调用不正确。在 wp_enqueue_scripts、admin_enqueue_scripts 或 login_enqueue_scripts 挂钩之前,不应注册或排队脚本和样式。此通知由等待 list_update 句柄触发。有关更多信息,请参阅 WordPress 中的调试。 www.xyz.com/wp-includes/functions.php 在线 5225 。我一定误解了建议中的某些内容。

EDIT 2 其他一切正常,但按钮似乎没有更新任何内容。

函数文件中的 PHP -

function my_scripts() {   
wp_enqueue_script( 'waitlist_update_call', get_template_directory_uri().'/assets/js/waitlist_update_call.js', array('jquery'), null, true );
wp_localize_script('waitlist_update_call', 'my_ajax', array('ajax_url' => admin_url('admin-ajax.php')));
    echo getcwd();
//calls Waitinglist data and creates table
}
add_action('wp_enqueue_scripts', 'my_scripts');

add_action('wp_ajax_waitlist_update_function', 'waitlist_update_function'); // logged in user can make a call

function waitlist_update_function() {
    global $wpdb;
    $results = $wpdb->query( $wpdb->prepare("UPDATE 'mytablename' SET `currentstatus` = 
    'myupdate1' WHERE ID = '1'"));
    die($results);

}

JS

// JavaScript Document
function update() {
jQuery.ajax({
    type: 'post',
    url: my_ajax.ajax_url,
    // add your action inside data object
    data: { 
      action: 'waitlist_update_function' 
    },
    success: function(data){
        // callback function
    }
});
}

HTML 去吧!

【问题讨论】:

  • 问题出在服务器上,因为 500 响应意味着服务器端失败 - 检查服务器 (php) 日志是否有错误
  • 谢谢。所以我的PHP字符串不行,那是理论吗?
  • 我可以看到您正在使用 wordpress。您正在从您的主题文件夹中调用一个文件 - 这是奇怪,而不是应该如何完成。请添加您要使用此代码执行的操作
  • 还有你是如何以及从哪里调用这个点击函数的?
  • 应该使用 WP AJAX API ,直接发送到主题路径不是一个好主意。在使用$wpdb 之前,您是否在该文件中加载了 wp?

标签: javascript php


【解决方案1】:

问题应该出在 URL 上,我认为它必须是绝对的。

jQuery.ajax({
    //....
    url: 'http://yourwebsite.com/wp-content/themes/yummy/update-waitlist.php'
    // ...

WordPress 方式

您必须在 script.js 之前使用相同的 handle 将您的 JS 文件排入队列 然后在它之后进行本地化

本地化脚本以传递通用数据。我们将ajax_urlmy_ajax 对象一起传递。

functions.php

wp_localize_script('your-script-handle', 'my_ajax', array('ajax_url' => admin_url('admin-ajax.php')));

然后在您的脚本文件中,您可以使用my_ajax 对象来获取AJAX URL。定义一个动作function_1,当请求此 AJAX 调用时将执行该动作。

script.js

jQuery.ajax({
    type: 'post',
    url: my_ajax.ajax_url,
    data: {
      action: 'function_1',
    }
    success: function(data){
        // callback function
    }
});

定义一个函数并将其附加到将查询数据库并返回结果的 Ajax 操作。

functions.php

add_action('wp_ajax_function_1', 'function_to_execute_some_query'); // logged in user can make a call
add_action('wp_ajax_nopriv_function_1', 'function_to_execute_some_query'); // non logged in user can make a call

function function_to_execute_some_query() {
    global $wpdb;
    $results = $wpdb->query( $wpdb->prepare("UPDATE 'wp_wpdatatable_4' SET `currentstatus` = 
    'myupdate1' WHERE wdt_ID = '1'"));
    die($results);

}

【讨论】:

  • 非常感谢这个详细的回答。我一定是误解了一些东西,因为按照上面的说明进行操作(我认为)我得到了 Uncaught ReferenceError: my_ajax is not defined on page load 和 Uncaught ReferenceError: myFunction is not defined at HTMLButtonElement.onclick
  • 还在上面添加了一个关于脚本的附加错误。
  • @theodore 在您更新的脚本中,删除my_ajax. 并仅在单引号内包含文件的整个路径。正如我在上面的答案中所说,要使用通用数据,我们需要针对特定​​脚本对其进行本地化,如果没有本地化,它将无法工作。因此,删除 my_ajax 并仅包含绝对路径。请参阅我的答案的第一部分。要么遵循第一个答案,要么使用 WordPress 方式下面的答案更新所有内容。
  • 啊,谢谢。我会尝试并报告回来。我从字面上理解它,因为上面有人说不要使用整个文件路径。确认它看起来像 url: maydomain.com/path 而不是 my_ajax.ajax_url
  • 是的,它看起来像您提到的 URL,而且您不应该使用整个路径。您应该遵循推荐的 WordPress 方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 2012-06-06
相关资源
最近更新 更多